例如,我想让Object#rescue
成为另一个名字,以便我可以在我的代码中使用:
def dangerous
something_dangerous!
dont_worry # instead of rescue here
false
end
我试过
class ::Object
alias :dont_worry :rescue
end
但无法在rescue
上找到Object
方法:
`<class:Object>': undefined method `rescue' for class `Object' (NameError)
另一个例子是我想要替换语言when
:
if cond
# eval when cond is truthy
end
到
when cond
# eval when cond is truthy
end
谢谢!
答案 0 :(得分:5)
如果没有对Ruby语言本身进行一些深刻的更改,这是不可能的。你描述的东西不是方法,而是语言的关键词,即Ruby的实际核心。因此,这些东西根本不是用户可更改的。
如果您仍想更改关键字的名称,则至少需要调整语言解析器。如果你根本不改变语义,这可能会按原样进行。但是如果你想改变这些关键词所代表的内容,那么事情会很快变得混乱。
另请注意,Ruby本身有时很模糊(例如关于括号,点,间距),并且需要很长时间才能以一致的方式解决这个问题。如果您更改关键字,则必须确保事情不会变得更加模棱两可。这可以是例如您将if
更改为when
即可。 when
已用作关键字case
语句,因此在用作if
时可能会产生歧义。