Scala的方式来编写JavaScript的'foo ["bar"]'

sui*_*ish 0 javascript scala

这是我猜的非常基本的问题但是如何通过使用变量来访问类成员?我想要达到的是这样的.

//斯卡拉

class Foo {
  var sample:String = _
  var sample2:String = _
}
//in another Class
val foo = new Foo()
val key = bar match {
  case "something" => "sample"
  case _ => "sample2"
}
//want to access foo.sample or foo.sample2 by using key variable.
Run Code Online (Sandbox Code Playgroud)

这是用foo[key]JavaScript编写的

提前致谢.

cod*_*tsu 5

如果你想要javascript语义(比如按名称访问成员),请查看Dynamic-trait.

有了Dynamic你可以做这样的事情:

class MyDynamic extends Dynamic {
  var map = Map.empty[String, Any]

  def selectDynamic(name: String) =
    map get name getOrElse sys.error("method not found")

  def updateDynamic(name: String)(value: Any) {
    map += name -> value
  }
}

scala> val d = new MyDynamic
d: MyDynamic = MyDynamic@7711a33f

scala> d.foo
java.lang.RuntimeException: method not found

scala> d.foo = "blah"
d.foo: Any = "blah"

scala> d.foo
res56: Any = "blah"
Run Code Online (Sandbox Code Playgroud)

您可以按名称调用方法:

scala> d.selectDynamic("foo")
res54: String = foo
Run Code Online (Sandbox Code Playgroud)