Squeakは純粋にオブジェクト指向であるため、関数をパラメーターとして他の関数に渡すことができるはずですが、これについて調べていたところ、これに関する情報は見つかりませんでした。私の直感は正しいですか?もしそうなら、それはどのように行われ、後でどのように呼び出すのですか?
2 に答える
3
より長い答え。
実行可能コードをメソッドに渡すには、ブロックを使用します。
メソッド定義は
method: aBlock
aBlock value
そして、次のように実行します
object method: [ Transcript show: 'hello' ].
コードにパラメーターを渡したい場合は、引数付きのブロックを使用します。
メソッド定義は
method: aBlock
aBlock value: 'parameter'
そして、次のように実行します
object method: [ :arg | Transcript show: arg ].
ブロックのメソッドvalue:value:
とメソッドを使用して、2 つまたは無制限のパラメーターを使用して同じことを行うことができます。valueWithArguments:
シンボルを渡すと、 を使用value:
して実行することもできます。シンボルは、実際には の形式のブロックと同等[ :arg | arg symbol ]
です。
于 2009-12-05T21:38:02.210 に答える
2
あなたは2つの異なることを混乱させています。Smalltalkで渡す実際の「関数」はブロックだけです。これは、引数としてブロックを記述するだけで渡されます(everyの場合と同様ifTrue:
)。メッセージをオブジェクトに送信したいが、メッセージを動的に決定する場合は、メッセージ名をシンボルとして渡し(例#value
)、オブジェクトに送信することができます(例:)perform:
。インスタンスメソッド自体を渡すことはありません。セレクターシンボルを渡すか、メソッドを呼び出すためのメッセージを送信するブロックを渡します。
于 2009-11-30T18:36:30.957 に答える