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

标签 javascript scala

我想这是一个非常基本的问题,但是如何使用变量访问类成员? 我想要实现的就是这样的。

//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.

在 JavaScript 中写为 foo[key]

提前致谢。

最佳答案

如果您想要 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"

您可以通过名称调用您的方法:

scala> d.selectDynamic("foo")
res54: String = foo

关于javascript - Scala 方式编写 JavaScript 的 'foo["bar"]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33471208/

相关文章:

javascript - 如何在页面加载时隐藏 iPad 栏?

Javascript 和图像映射?这是如何工作的?

javascript - 接收函数作为参数的函数是否仍然可以视为纯函数?

javascript - "inline-style"- 内容安全策略和 Javascript 出错

java - 如何从 Java/Scala 使用 Unix 域套接字?

scala - Scala流库的差异( react 流/Iteratee/RxScala/Scalaz…)

javascript - 未分配闭包变量

java - 清除scala中的 session 值

java - Scala编译时错误: No implicits found for parameter evidence$2: BodyWritable[Map[String,对象]]

java - 在 Scala 中使用对象的地址作为 Map 键