関数を定義したとします。
def hello(name:String, words:String) = println("Hello!" + name + words)
次に、部分関数を定義しました。
def p = hello _
p を印刷すると、次のように表示されます。
(String, String) => Unit = <function2>
関数名は表示されません。hello
部分関数から元のメソッド名を取得することはできますp
か?
関数を定義したとします。
def hello(name:String, words:String) = println("Hello!" + name + words)
次に、部分関数を定義しました。
def p = hello _
p を印刷すると、次のように表示されます。
(String, String) => Unit = <function2>
関数名は表示されません。hello
部分関数から元のメソッド名を取得することはできますp
か?
最近、メーリング リストで、現在使用しているメソッドを識別できるようにする言語構造についていくつかの議論がありました。それは次のように呼ばれ、基本的にクラス インスタンスに対してthisMethod
行うことをメソッドに対して行います。this
これが関数 (メソッドとは異なる概念) とどのように相互作用するかを知りたいと思います。Yourp
は、メソッドを部分的に適用して作成された無名関数ですhello
(ここでも注意が必要です。「部分的に適用された関数は、 a とはまったく異なるものですPartialFunction
。) その後、呼び出される実際のメソッドはapply
、この関数オブジェクト上にあり、thisMethod
そのような場合にどのように振る舞うことができるかについてのいくつかの可能性。
何が起こってもp
、オブジェクト参照にすぎません。名前としてアクセスできるとは思わないでください。
いいえ。
これは私が欲しい機能ですが、同じ関数に 2 つの名前が付けられた場合にどうなるかなど、深刻な概念上の問題があります ... それでも同じ関数である必要がありますね。
コメントに応じて更新:
デフ p = こんにちは _ デフ q = p
qの名前は?p? またはこんにちは?またはprintln?シンプルで一貫性があり、便利なソリューションを想像するのに苦労しています。
...これは実際には、パラメーターが適用されずに hello 関数を呼び出すことによって匿名で作成される「部分的に適用された関数」です。表示する明示的な名前はありません。