我知道:
C ++,Java和其他人:
object.method() , object.method(arg)
目标-C:
[object method] , [object method:arg]
Smalltalk中:
object method , object method: arg
PHP,Perl
object->method(), object->method(arg)
$object->method;
$object->method($arg1, $arg2, ...);
OCaml的
object#method , object#method args
CLOS
(method object) , (method object arg)
甚至,我使用过:
method object
method(object)
您可以在不同的编程语言中为向对象发送消息(我认为这是正确的术语)的其他替代方法命名吗?
答案 0 :(得分:5)
答案 1 :(得分:1)
最有趣的可能是“通用函数”表示法 - 在CLOS(Common Lisp的OO部分)中,它们被称为(method object arg)
(defgeneric
用于{{1} }}作为泛型函数,method
定义其特化/覆盖);在更加面向代数表示法的语言中,如Dylan和Python(例如PEAK),调用将更像defmethod
。
关于通用/方法方法(Common Lisp开创性的AFAIK)最酷的事情是它不会 以不同于所有其他方式处理第一个对象 - 方法调度可能发生在任何参数'运行时类型的组合,而不仅仅是参数的一个的运行时类型(单参数调度显然作为特殊情况涵盖;-)。告别Visitor和所有其他变体(例如this paper),它们基本上尝试模拟单调度语言中的多个调度! - )
答案 2 :(得分:1)
为了完整起见:
虽然VB.NET通常使用与C#相同的样式,但是也可以省略方法和无参数函数/构造函数的括号:
stream.WriteLine "Hello"
Dim x = stream.ReadLine
但IDE会自动为参数化方法调用添加括号(奇怪的是,对于函数和构造函数,它不会做同样的事情)。
此外,VB.NET仍然知道(有些古老的)Call
关键字,它再次强制围绕参数化方法调用的括号:
Call stream.WriteLine("Hello") '// is the same as'
stream.WriteLine("Hello")
'// This won’t compile:'
Call stream.WriteLine "Hello"
答案 3 :(得分:1)
在Perl中,它的:
$object->method;
$object->method($arg1, $arg2, ...);
和潜在危险的间接对象语法(如果你在当前范围内有一个子命名方法,它将不起作用:
method $object $arg1, $arg2...;
答案 4 :(得分:0)
继Alex Martelli的评论之后,JVM语言中的多种方法很好
FiniteStateMachineMultiMethodExample