LATER EDIT:スカラエラー:値<FUNCTION_NAME>は、オブジェクトのメンバではない<OBJECT_NAME>
- 関連質問:の
Why are Scala class methods not first-class citizens?
Motivation for Scala underscore in terms of formal language theory and good style?
使用_
ワイルドカード、またはプレースホルダの構文:Scala placeholder syntax
- この質問では、私はよりコンパクトな構文を達成しようとしていた、その溶液は、いわゆるプレースホルダの構文を関与しました。この視点は、ジェイソン・シュワルツのLearning Scalaに強化され、ページ74:
Placeholder syntax is especially helpful when working with data structures and collections. Many of the core sorting, filtering, and other data structure methods tend to use first-class functions, and placeholder syntax reduces the amount of extra code required to call these methods.
QUESTION本体
私は、一次関数のためのScalaのサポートを試して、this問題が発生していますパラメータとしてメソッドを渡すことについて。私が理解する限り、解決方法は(名前付きまたは匿名の)一次関数でメソッドをラップすることです。これは私のために働い:
def wrapperFn(s:String):String = s.reverse
wrapperFn
は現在、他の高階関数に、または値としてこのような他の定義にパラメータとして渡すことができます。
val otherGoodFn:(String=>String) = goodWrapperFn
これまでのところは良いです。私は(s
パラメータのやや冗長な使用を避けること)の両方の手順を混ぜ、直接このように、機能型指定された値にメソッドを渡すしようとしたときに問題が来た:
def errorFn:(String=>String) = String.reverse
:予想通り、これが動作するため、私は、理解していない
error: value reverse is not a member of object String
def errorFn:(String=>String) = String.reverse
^
:
val s:String = "hello"
s.reverse
だから、明らかにこの方法は、インスタンスのメンバーではなく、オブジェのct/Class(??)Scalaは、Javaとは非常に異なる方法でクラスとオブジェクトの存続時間を処理するようです。だから今より簡潔に私の質問、:
- はいくつかの愚かなミスによるエラーであるか、または許可されていないことは確かでしょうか?許可されていない場合、なぜですか?
ありがとうございます!
すばらしい、ありがとう。 '_'ワイルドカードは '=>'トークンの前の型に直接マップされていると思いますか? –
はい、名前のないパラメータの型は、ここでメソッドのシグネチャから推測されます。 – Thilo
とここにどのように(とにかく私の投稿を編集)です:http://stackoverflow.com/questions/8260367/scala-placeholder-syntax –