在值名称中使用变量

时间:2016-11-01 16:36:00

标签: scala

如何随机调用两个val:foo1和foo2。

我设法将名称生成为字符串但是如何将其转换为值名称以打印值而不是名称。

val r = scala.util.Random

val foo0 = 10
val foo1 = 5

println("foo"+r.nextInt(2))
当我想要10或5

时,

给出foo0或foo1

2 个答案:

答案 0 :(得分:2)

这在静态类型语言中不起作用。很确定这也是任何动态语言的不良做法。

尝试:

List(foo0, foo1)(r.nextInt(2))

答案 1 :(得分:2)

您可以技术通过反射执行此操作,但不应该

class Foo {
  val foo0 = 10
  val foo1 = 5
}

val r = new scala.util.Random

scala> val foo = new Foo
foo: Foo = Foo@f5009c7

scala> foo.getClass.getDeclaredMethod("foo" + r.nextInt(2)).invoke(foo).asInstanceOf[Int]
res19: Int = 10

同样,我们不应该这样做。它会把你的代码变成一片庞大的雷区。

如果您发现自己使用foo0foo1foo2等索引来命名,则表示它们可能属于某种类型的集合。

val foos = List(10, 5)

然后您可以使用apply

按索引访问它们
foos.apply(r.nextInt(2))

scala> foos(r.nextInt(2))
res20: Int = 5