簡體   English   中英

在Scala中將方法添加到列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM