24

Smalltalkに似たメッセージパッシング構文を備えた言語は何ですか?私が精通しているのはObjective-Cだけです。[anObject methodWithParam:aParam andParam:anotherParam]具体的には、メソッド定義の一部として名前付きパラメーターを許可するメッセージを持つ、次のような形式の構文を許可する他の言語実装が存在するかどうか疑問に思いました。

一般に、この構文は、メソッドの意図をより明確に示す、より一貫性のあるメソッド名を助長する可能性があり、言葉遣いで支払う価格は一般的に価値があることがわかります。これをサポートする他の言語があるかどうか知りたいです。

4

7 に答える 7

14

以下は、Smalltalk に似たキーワード メッセージ構文をサポートする言語のリストです。

于 2011-05-26T23:07:28.887 に答える
5

ここで言及されている他の言語に加えて、ファンシー

osna = City new: "Osnabrück"
p = Person new: "Christopher" age: 23 city: osna
p println

berlin = City new: "Berlin"
p go_to: berlin
p println
于 2011-06-03T01:06:05.353 に答える
3

たとえばSelfを参照してください。

また、Python や C# (v4 以降) など、多くの言語がオプションの名前付きパラメーターをサポートしています。

于 2011-05-26T21:46:41.137 に答える
2

Python と Common Lisp (おそらく他にもある) では、キーワード引数を使用できます。パラメータ名を含む関数を呼び出すことができます。

キーワード引数は位置を無視するため、これらは Obj-C のメソッド名と同等ではありませんが、読みやすさに関する質問に答えます。*

make_an_omelet(num_eggs=2, cheese=u"Gruyère", mushrooms=True)

(make-a-salad :greens 'boston-lettuce 
              :dressing 'red-wine-vinaigrette 
              :other-ingredients '(hazelnuts dried-apricots))

もちろん、これはメッセージ パッシングではなく、単なる古い関数呼び出しです。


※デフォルト値の指定など、これ以外の用途もあります。

于 2011-05-26T22:11:27.247 に答える
-1

Rubyは、objcとほぼ同じように、メソッドを呼び出すためにオブジェクトにメッセージを送信できます。

class Foo
  def bar a,b
    a + b
  end
end

f = Foo.new
f.send(:bar, a=4, b=5)
>> 9

確かに、とりわけ、これはMacRubyでのCocoaとRubyの統合を可能にします

于 2011-05-26T21:56:10.000 に答える
-1

Erlangはオブジェクト指向であるとは主張していませんが、メッセージ パッシングはその言語の重要な概念です。

于 2011-05-29T15:58:02.833 に答える