3

Scalaと変数スコープに関するいくつかの質問を見てきました(Scala変数スコープの質問など)

ただし、特定のユースケースを機能させるのに問題があります。

私がRepoと呼ばれる特性を持っているとしましょう:

trait Repo {
    val source: String
}

そして、Repoの実装を作成する方法があります...

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

もちろん、2つのsource変数を使用しています。1つはメソッドレベルで、もう1つはRepo実装内です。定義source内からメソッドレベルを参照するにはどうすればよいですか?Repo

ありがとう!

4

2 に答える 2

2

これが標準的な方法であるかどうかはわかりませんが、機能します。

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)
于 2011-11-03T01:42:44.740 に答える
1

Luigiのソリューションに加えてRepo、特性からクラスへの変更を検討することもできます。

class Repo(val source: String)
def createRepo(source: String) = new Repo(source)
于 2011-11-03T02:33:05.543 に答える