Неоднозначное имя переменной Scala в методе - PullRequest
3 голосов
/ 03 ноября 2011

Я видел некоторые вопросы, касающиеся Scala и переменной области видимости (например, Вопрос Scala о переменной области видимости )

Однако у меня возникли проблемы с выполнением моего конкретного варианта использования.

Допустим, у меня есть черта Repo:

trait Repo {
    val source: String
}

И затем у меня есть метод для создания реализации Repo ...

def createRepo(source: String) = 
  new Repo {
    val source: String = source
  }

КонечноУ меня есть две переменные source, одна на уровне метода и одна внутри реализации Repo.Как я могу сослаться на уровень метода source из моего определения Repo?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Не уверен, что это канонический способ, но он работает:

def createRepo(source: String) = {
  val sourceArg = source
  new Repo {
    val source = sourceArg
  }
}

Или вы можете просто дать своему параметру другое имя, которое не будет конфликтовать.

Или сделать фабрику:

object Repo {
  def apply(src: String) = new Repo { val source = src }
}

def createRepo(source: String) = Repo(source)
1 голос
/ 03 ноября 2011

В дополнение к решениям Луиджи, вы также можете рассмотреть возможность изменения Repo с черты на класс

class Repo(val source: String)
def createRepo(source: String) = new Repo(source)
...