这个让我夜不能寐有一段时间了。
class Foo
def bar
'bar'
end
# What the hell is going on here?!?
alias :baz :bar
end
Foo.new.baz #=> 'bar'
为什么alias
将 2 个符号作为参数,但没有逗号分隔它们?在任何其他上下文中,这似乎都不是任何形式的有效语法。事实上,如果你确实使用了逗号,它实际上会引发语法错误。
alias :bar, :baz
# syntax error, unexpected ','
但是,如果我尝试以相同的方式将 2 个符号传递给我自己的方法,它也会爆炸:
def somemethod(*args)
:whatever
end
somemethod :a :b
# syntax error, unexpected ':', expecting $end
- 那么,为什么
alias
get 方法使用了没有其他方法可以使用的语法呢? - 是否可以在任何其他上下文中使用此语法?
- 当语言中没有其他东西以这种方式工作时,使用这种奇怪的语法怪癖有什么好处?我认为这种语言不一致没有明显的好处。