Ссылка на параметр функции с тем же именем - PullRequest
1 голос
/ 24 января 2012

предположим, у меня есть черта, у которой значение val совпадает с параметром функции, которая пытается создать экземпляр черты:

def func(param: String) {
  val _param = param
  new SomeTrait {
    val param = _param
  }
}

Есть ли лучший способ ссылки на параметр функции 'param'?

Ответы [ 3 ]

4 голосов
/ 24 января 2012

Боюсь, нет лучшего способа. В зависимости от того, как часто вам нужно инициализировать SomeTrait, вы можете написать заводской метод, чтобы уменьшить некоторые из этих шаблонов.

trait SomeTrait {
  def param: String
}

object SomeTrait {
  def apply(param: String): SomeTrait = {
    val _param = param
    new SomeTrait {
      def param = _param 
    }
  }
}

def func(param: String) = {
  SomeTrait(param)
}
1 голос
/ 24 января 2012

В вашем примере имеет смысл превратить ваш SomeTrait в класс.

class SomeClass(val param: String)

def func(param: String) = new SomeClass(param)

Если вы не можете выполнить рефакторинг таким образом, вам следует просто переименовать параметр:

def func(p: String) {
  new SomeTrait {
    val param = p
  }
}
0 голосов
/ 24 января 2012

Вот как вы могли бы обойтись без помощи метода apply плюс объект-компаньон

trait SomeTrait {
  val param:String
}

class A {
  def func(param:String):SomeTrait = ((p:String) => new SomeTrait { val param = p })(param)
}

Я только что представил анонимную функцию инкапсуляции / абстрагирования для параметра, которую я назвал.

Результат получился более лаконичным и читабельным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...