2015-10-30 103 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 _