をI持っているのScala-IDEに次のコード:スカラ - 機能パッシング - 型混乱
type myF =() => Boolean
def acceptFunction(f: myF) {
//...
}
、その後:
var a = false
def isA =() => a
が、私はacceptFunctionに、それを渡ししようとすると、それはエラーになります:
acceptFunction(isA)
エラーは次のとおりです。
type mismatch; found :() => Boolean required: Boolean
しかし、なぜですか?
私はこのようなisA
宣言する場合:
def isA() =() => a
それが受け入れられたのが、私は仮定し、それはのために括弧の評価をを取得します。
このような関数をより精度の高い評価に渡す方法はありますか?
UPDATE:
それはScalaの-IDEで何かあるように見えます。 REPLはこれらの式に問題はありません。しかし、それでも、渡された関数がクロージャに変換されないようにすることはできません。つまり、それはクロージャに変わり、後でvar a
を変更し、println(f())
で再度この例を呼び出すと、値は変更されません。だから、問題の第二の部分は残っています - より良い評価のためにそのような関数を渡す方法はありますか?
あなたのアップデートに応じて、より多くの質問で私の回答が更新されました。 –
Scala IDEではうまく動作します。あなたのコードを 'object'の中にラップしました。 –
'acceptFunction(isA())'のように、コールサイトで空の括弧を追加するとエラーになりますが、関数の適用時に 'Boolean '。 –