2017-03-02 51 views
0

我在斯卡拉一個新手,這一刻我學習一下吧......我測試代碼,我有一個列表[任何]是這樣的:Scala List [Any]有一個元素作爲函數。如何獲得回報價值?

var list: List[Any] = List(
    "a string", 
    732, // an integer 
    'c', // a character 
    true, // a boolean value 
    (x: String) => "String return " + x) 

我想要得到的返回值的索引4,但我得到一個錯誤。我不知道如何獲得回報價值,這是我的疑問。

var test = list(4); 
test("hello") // Error 
+1

什麼是錯誤?這很重要。 – Carcigenicate

+1

您可能需要將該函數作爲函數進行轉換,因爲就編譯器而言,'test'是如果輸入'Any',則不能保證它是可調用的。 – Carcigenicate

回答

1

你需要調用它之前從Any投的功能String => String

var test = list(4) 

test.asInstanceOf[String => String]("hello") 
// res21: String = String return hello 

或者:

val test = list(4).asInstanceOf[String => String] 
// test: String => String = <function1> 

test("hello") 
// res23: String = String return hello 
0

你可以把它像這樣:

scala> val f = (x: String) => "String return " + x 
f: String => String = <function1> 
scala> val y = f.asInstanceOf[ String => String ].apply("x") 
y: String = String return x 
scala> val y = f.asInstanceOf[ String => String ]("x") 
y: String = String return x