2012-02-07 11 views
2

誰でも私にスカラコンパイラの中でcall-by-nameを動作させる方法を説明できますか? そのメソッドの構文ショートカットは次のようになります:arg:=>Intarg:() => Intに変換され、渡されたパラメータを関数にキャプチャします。 すなわち、実際のタイプのcall-by-nameパラメータ:Function0[_]call-by-nameパラメータ

ありがとうございました。

+1

何をしますか?問題ははっきりしていません。 –

+0

@ DanielC.Sobralこんにちは。 'def foo(i:=> Int):[Int、Function1 [ここでは、 'call-by-name'パラメータのタイプ、[_、_]]]のいずれかが必要です。 **どのように私はそれを書くことができますか?**純粋に仮想の質問... – dvigal

答えて

3

私が質問を正しく理解しているとしたら、=> Intの構文は基本的に匿名のパラメータなし関数() => Intの軽量構文であり、ScalaのFunction0[Int]という形で表されます。さらに、VM by-nameパラメータ内で内部クラスに変換されます。

4

あなた自身が発見した名前によるパラメータは、Function0[A]になります。彼らはファーストクラスのサポートを持っていないので、そのような異なるタイプはありません。

ScalazのNameを使用して、これらの行に沿って何かを達成することができます。そのためには、受け入れられた答えhereを参照してください。

1

"タイプ別名前"のようなものはありません。 By-nameは型ではなく、パラメータ渡しモードです。

by-nameを渡すパラメータの代わりにFunction0を使用できますが、セマンティクスは異なります。