Установить неявный возврат функции в Scala

Я пишу DSL (предметно-ориентированный язык для моего кода). Код такой:

class NeuronGroupDSL(identifier: String)(implicit network: N2S3SimulationDSL ) // declared values which must be provided by the user, [we can just give a default constructor to this]
 {
  implicit val sizeDefault : Int = 28 // added the implicit default value for the setNumberOfNeurons method
  val id: String = identifier // We can add a default constructor with the Id and the network to this too allow user to skip this part
  var neuronGroup: Option[NeuronGroupRef] = None // this variable stores all the information by using the get property and a associated function with it
  private var neuronParameters: Seq[(Property[_], _)] = Seq()
  private var neuronModel: NeuronModel = _

/**Properties of the NeuronGroupDSL **/
// Added a default size to the size variable
  def ofSize(implicit size: Int): NeuronGroupDSL = {
    this.neuronGroup.get.setNumberOfNeurons(size)
    this
  }
// Give user the opportunity to choose the type of available models by the help of pattern matching
/**Neuron Model:
1. Linear leaky integrate-and-fire model
2. FitzHugh-Nagumo model
3. Izhikevich model
**/
  def modeling(model: NeuronModel): NeuronGroupDSL = {
    this.neuronModel = model
    this.neuronGroup.get.setNeuronModel(model, this.neuronParameters)
    this
  }
//we can define a default property the neuron group model here
  def withParameters(properties: (Property[_], _)*): NeuronGroupDSL = {
    this.neuronParameters = properties
    this.neuronGroup.get.setNeuronModel(this.neuronModel, properties)
    this
  }
}

Как видите определенияofSizemodelingwithParameters имеют один и тот же возвращаемый тип, поэтому можно ли неявно определить их возвращаемый тип и определить эти функции без их возвращаемой части?

Пожалуйста, помогите мне, я хочу максимально сократить код.

Я тоже хочу знать, можно ли использоватьcase class ,concise lambda syntax в этом коде, чтобы еще больше его минимизировать.

# dsl
Источник
Codelisting
за 0 против
Лучший ответ

Вы можете просто отбросить возвращаемый тип, он будет выведен автоматически:

def ofSize(implicit size: Int) = {
  neuronGroup.get.setNumberOfNeurons(size)
  this
}
  • 1
    Компилятор Scala работает быстрее, если вы явно определяете возвращаемые типы.
  • 0
    Но как компилятор неявно определяет возвращаемый тип, потому что я его никогда не определял. Пожалуйста помоги.
  • 0
    Указывает ли this в конце определения каждой функции возвращаемый тип?
  • 1
    Тип возврата - это просто тип this . this -reference имеет тип NeuronGroupDSL . Здесь нет обобщений, высших типов, сложных аннотаций дисперсии или вычислений с наименьшими верхними границами. Я сомневаюсь, что замедление, вызванное опущенным типом возврата, будет обнаружено.
  • 0
    Принято к сведению. Спасибо. Кроме того, пожалуйста, не могли бы вы помочь мне еще больше сократить код по case class , если возможно concise lambda syntax
  • 0
    @AnimeshSrivastava Что именно ты хочешь с ними делать? Я не понимаю, чем здесь могут быть полезны эти языковые функции. У вас есть один класс с тремя сеттерами, что вы вообще хотите здесь оптимизировать ...
  • 0
    @AndreyTyukin на самом деле у меня есть набор файлов и уже созданный предметно-ориентированный язык. Я просто работаю над минимизацией кода для лучшей читаемости и использования.
Codelisting
Популярные категории
На заметку программисту