2

Squeakは純粋にオブジェクト指向であるため、関数をパラメーターとして他の関数に渡すことができるはずですが、これについて調べていたところ、これに関する情報は見つかりませんでした。私の直感は正しいですか?もしそうなら、それはどのように行われ、後でどのように呼び出すのですか?

4

2 に答える 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 に答える