如何隨機調用兩個val:foo1和foo2。在名稱中使用變量
我設法生成一個字符串的名稱,但我怎樣才能將它轉換爲值名稱打印的價值,而不是名稱。
val r = scala.util.Random
val foo0 = 10
val foo1 = 5
println("foo"+r.nextInt(2))
給foo0或foo1時,我想10%或5
如何隨機調用兩個val:foo1和foo2。在名稱中使用變量
我設法生成一個字符串的名稱,但我怎樣才能將它轉換爲值名稱打印的價值,而不是名稱。
val r = scala.util.Random
val foo0 = 10
val foo1 = 5
println("foo"+r.nextInt(2))
給foo0或foo1時,我想10%或5
可以技術上與反思這樣做,但你不應該。
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
這並不是一個靜態類型語言工作。很確定,這在任何動態語言中都是不好的做法。
嘗試:
List(foo0, foo1)(r.nextInt(2))