Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 定义和执行输出单元的方法的规范方法?_Scala - Fatal编程技术网

Scala 定义和执行输出单元的方法的规范方法?

Scala 定义和执行输出单元的方法的规范方法?,scala,Scala,我有一个输出单元的方法(函数)列表: var fns:List[() => Unit] = Nil def add(fn:() => Unit) = fns :+= fn // a method to add to the list 我想将println(“hello”)添加到列表中 add(() => println("hello")) 有没有比使用难看的括号更好的方法 我宁愿: add (println("hello")) // error here

我有一个输出
单元的方法(函数)列表:

var fns:List[() => Unit] = Nil
def add(fn:() => Unit) = fns :+= fn      // a method to add to the list
我想将
println(“hello”)
添加到列表中

add(() => println("hello"))  
有没有比使用难看的括号更好的方法

我宁愿:

add (println("hello"))  // error here 

def myCoolMethod = {
   // do something cool
   // may return something, not necessarily Unit
}
add (myCoolMethod) // error here
我尝试了
var-fns:List[=>Unit]
var-fns:List[Any=>Unit]
fns:List[()=>Any]
等,但没有得到我想要的

第二个问题是,当我想执行列表中的方法时,如何执行。我用它工作:

fns foreach (_.apply) 

有更好的办法吗

您可以按名称使用
参数,而不是使用空参数列表的函数,如下所示:

var fns:List[() => Unit] = Nil
def add(fn: => Unit) = fns :+= (fn _)

add{ print("hello ") }

def myCoolMethod = { println("world") }
add(myCoolMethod)

fns foreach {_.apply}
// hello world

您可以使用
而不是
.apply
fns foreach{{code()}
,但我更喜欢
.apply

您可以使用
按名称
参数,而不是像下面这样带有空参数列表的函数:

var fns:List[() => Unit] = Nil
def add(fn: => Unit) = fns :+= (fn _)

add{ print("hello ") }

def myCoolMethod = { println("world") }
add(myCoolMethod)

fns foreach {_.apply}
// hello world

您可以使用
而不是
.apply
fns foreach{code()}
,但我更喜欢
.apply

我们可以有一个
add
来接受方法的
Seq
而不是一个方法吗?所以我可以做
add(Seq(println(“hello”),mycolmethod))
@Jus12:不,没有宏,你不能按名称重复参数。我们可以有一个
add
来接受方法的
Seq
,而不是一个方法吗?所以我可以做
add(Seq(println(“hello”),mycolmethod))
@Jus12:不,没有宏,你不能按名称重复参数。