2016-11-11 10 views
0

ユニットコールバックをパラメータとするコールバック、つまりUnitを返す関数があります。私がこのような私の関数を定義した場合、Adaptation of argument list by inserting() has been deprecatedという警告が表示されます。動作しますが、醜いですユニットを受け取って返すコールバックユニット

def myFunction (callback: Unit => Unit) = { 
    callback (()); 
} 

動作しません
def myFunction (callback: Unit => Unit) = { 
    callback; 
} 

(私のコールバックが呼び出されていない)、またはへ:this answerに続いて、私はに私のコードを変更しようとしました。二重括弧を避ける方法はありますか?おそらく、Unit => Unitのパラメータタイプを、「1つのパラメータまたはタイプUnitを取る関数」ではなく「パラメータを取らない関数」を意味する何かに変更することによって、

+0

多分、ユニットを取る必要はありませんか? 'def myFunction(コールバック:=>ユニット)=コールバック' –

+0

[()による引数リストの適用が廃止されました](http://stackoverflow.com/questions/25351988/adaptation-of-argument-list) -by-inserted-has-been-dep-been-deprecated) –

+0

'callback'の本体は、その型が' Unit => Unit'の場合、単に 'Unit => Unit'関数を返します。 'Unit'値を取得するには、' Unit'型の '()'を渡す必要があります。 –

答えて

0

は、単純にパラメータをとらない関数です。すべての行の最後に明示的に;と入力する必要はありません。

def myFunction (callback:() => Unit) = callback() 

これは、call-by-nameパラメータと同じではありません。

0

名前で呼び出します。

名前で呼び出しを使用します。 Call by nameパラメータは、関数のような名前で明示的に呼び出されたときにのみ実行されます。

def myFunction (callback: => Unit) = callback 

ScalaのREPL

scala> def myFunction (callback: => Unit) = callback 
myFunction: (callback: => Unit)Unit 

scala> myFunction(println("helloworld")) 
helloworld 

scala> myFunction { println("foo"); println("bar") } 
foo 
bar 
0

これを試してください:あなたが最も可能性の高い探しているものを

object CallUnit { 
    def main(args: Array[String]) { 
    myFunction(cbk) 
    } 
    def myFunction(callback: => Unit) = { 
    callback 
    } 
    def cbk { 
    println("Call me maybe") 
    } 
} 
関連する問題