在Scala中,功能可以由撰写应用样式的功能
def f = { x:Int => x + 420}
f.compose(f)
还有一个方法来定义对象
object F {
var y = 420
def apply (x: Int) = x + y
}
println(F(3))
功能应用我该如何撰写这些功能样对象?以下不起作用。
println(F.compose(F))
在Scala中,功能可以由撰写应用样式的功能
def f = { x:Int => x + 420}
f.compose(f)
还有一个方法来定义对象
object F {
var y = 420
def apply (x: Int) = x + y
}
println(F(3))
功能应用我该如何撰写这些功能样对象?以下不起作用。
println(F.compose(F))
您可以创建一个匿名函数F(_)
并撰写那些:F(_).compose(F(_))
(编辑:见维克多莫罗兹的评论)。
您还可以使您的对象的功能:object F extends (Int => Int)
和写F.compose(F)
。
1.'(F(_))。compose(F(_:Int ))'或'(F(_))。compose [Int](F(_))' –
奇怪:我明白为什么需要围绕第一个'F(_)'的括号(它是'x => F ).compose(F(_))'没有它们),但不是为什么编译器不能推断出类型参数。 –
一种可能的方式来实现:
F.apply _ compose F.apply _
它是否必须是一个对象? 'val f = new Function [Int,Int] {...}'? –
@VictorMoroz这基本上是我在我的第一个代码片段中定义的,我只是好奇如果有一种方法来编写具有'apply'定义的对象 – xuanji