2015-10-30 60 views
2

在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)) 
+0

它是否必须是一个对象? 'val f = new Function [Int,Int] {...}'? –

+0

@VictorMoroz这基本上是我在我的第一个代码片段中定义的,我只是好奇如果有一种方法来编写具有'apply'定义的对象 – xuanji

回答

2
  1. 您可以创建一个匿名函数F(_)并撰写那些:F(_).compose(F(_))(编辑:见维克多莫罗兹的评论)。

  2. 您还可以使您的对象的功能:object F extends (Int => Int)和写F.compose(F)

+1

1.'(F(_))。compose(F(_:Int ))'或'(F(_))。compose [Int](F(_))' –

+0

奇怪:我明白为什么需要围绕第一个'F(_)'的括号(它是'x => F ).compose(F(_))'没有它们),但不是为什么编译器不能推断出类型参数。 –

2

一种可能的方式来实现:

F.apply _ compose F.apply _