2016-11-01 112 views
0

如何隨機調用兩個val:foo1和foo2。在名稱中使用變量

我設法生成一個字符串的名稱,但我怎樣才能將它轉換爲值名稱打印的價值,而不是名稱。

val r = scala.util.Random 

val foo0 = 10 
val foo1 = 5 

println("foo"+r.nextInt(2)) 

給foo0或foo1時,我想10%或5

回答

2

可以技術上與反思這樣做,但你不應該

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

val r = new scala.util.Random 

scala> val foo = new Foo 
foo: Foo = [email protected] 

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

同樣,我們不應做到這一點。它會把你的代碼變成一個亂糟糟的雷區。

如果你發現自己命名的東西指標如foo0,foo1,foo2等,這意味着它們可能屬於某種類型的集合。

val foos = List(10, 5) 

然後你就可以使用apply通過索引來訪問它們:

foos.apply(r.nextInt(2)) 

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

這並不是一個靜態類型語言工作。很確定,這在任何動態語言中都是不好的做法。

嘗試:

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