現在、私はスカラコードベースを別々の地理的位置にまたがって管理しています。もの。私の最初の手の理解が私の当面の目標は、今、その層に浸透し、基本的なビルディングブロックされているかを確認することですので、Scalaは、シンタックスシュガーコードのかなり厚い層を持っているということでした。スカラの関数定義がどのように特性に評価されるのかを理解する
私はいくつかのドキュメントを読んだ後、Scalaではすべての関数定義は基本的に満たされた「適用」方式と特性であることを理解したよう。(匿名ボディ/ Javaでクラスとのインタフェースに類似)。これを基本として設定してください(私の基本的な理解自体が間違っていれば私を修正してください)、私はScalaで関数定義を使いこなしています。
def func (s:String):Int = {
100
}
が
new Function1[String, Int] {
def apply(s:String):Int = {
100
}
}
に評価しかし、どのような(そしてどのようにする)は、次の特性の定義に評価されない:
はこの考えてみましょうか?
def func (body: => Boolean):Int = {
body;
100;
}
この場合、「新しい機能...」コードはどのように見えるのですか?混乱の場合
感謝ダイブ!それは洞察力があった。それでは、 "新しいFunction ....."コードはどのように見えるでしょうか? – soupybionics
@soupybionics '' 'val body = newのようなものです。Function0 [Boolean] {def apply():Boolean = println(" calling body "); true} '' '、' 'func'の' 'Function1''と同様です。 ':=>'の構文(名前による呼び出しとも呼ばれる)はそれ以上のものではなく、 '' argsをとり何かを返す ''関数であることに注意してください。 – dveim
バイトコードを見るだけでは、型に何が起こるかは実際には分かりません。あなたは 'Function0'でそれを定義することはできません、それは別のタイプを持っています。 –