为Ruby的内置关键字提供别名

时间:2016-06-17 09:13:11

标签: ruby

例如,我想让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
  1. 是否可以在Ruby中完成Ruby关键字别名?
  2. 或者我需要破解Ruby C source code
  3. 谢谢!

1 个答案:

答案 0 :(得分:5)

如果没有对Ruby语言本身进行一些深刻的更改,这是不可能的。你描述的东西不是方法,而是语言的关键词,即Ruby的实际核心。因此,这些东西根本不是用户可更改的。

如果您仍想更改关键字的名称,则至少需要调整语言解析器。如果你根本不改变语义,这可能会按原样进行。但是如果你想改变这些关键词所代表的内容,那么事情会很快变得混乱。

另请注意,Ruby本身有时很模糊(例如关于括号,点,间距),并且需要很长时间才能以一致的方式解决这个问题。如果您更改关键字,则必须确保事情不会变得更加模棱两可。这可以是例如您将if更改为when即可。 when已用作关键字case语句,因此在用作if时可能会产生歧义。