[英]Adding methods to a list in Scala
我是Scala的新手,我想向列表中添加函數。 我有以下幾點:
var l2: List[() => Unit] = List()
def foo() {
println("In foo")
}
現在,我想向列表中添加一個方法。
() => println("x") :: l2
它可以編譯,但是在運行時不起作用。
下一個問題:為什么以下代碼不編譯?
l2 = foo :: l2
謝謝。
這是不正確的語法
() => println("x") :: l2
正確的是
(() => println("x")) :: l2
以及為什么l2 = foo :: l2
無法編譯的原因是因為foo
的類型與l2不兼容,因此無法深入理解它,請嘗試以下操作
foo.toString
但是以下內容將被編譯
var fn = {() => println("y")}
l2 = fn :: l2
要么
foo _ :: l2
首先, () => println("x") :: l2
解釋為() => (println("x") :: l2)
。 該函數不帶任何參數,並返回List[Any]
(在類型推斷之后)。
如@dursun所述,您要編寫:
(() => println("x")) :: l2
此外, l2 = foo :: l2
不會編譯,因為如果您使用函數值而不是應用它,Scala希望您明確聲明(主要是為了防止程序員濫用)。 采用:
foo _ :: l2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.