在Ruby中定义一个新的逻辑运算符

这是一个空闲的白日梦,但是有可能通过一些巧妙的元编程技巧在Ruby中定义一个新的逻辑运算符吗? 我想定义一个but运算符。

例如,如果我想做一些事情,如果x但不是y是真的,我必须写如下:

 if x and not y 

但我想写

 if x but not y 

它应该与完全相同and但是应该由程序员明智地使用以增加代码的易读性。

如果不编辑Ruby解析器和源代码并编译新版本的Ruby,则不能。 如果你愿意,你可以使用这个丑陋的语法:

 class Object def but(other) self and other end end x.but (not y) 

请注意,您无法删除此代码段中的括号或空格。 它还会将代码的function隐藏到其他读取代码的人身上。 不要这样做。

如果你真的想这样做,请尝试编辑parse.y并重新编译Ruby。 这就是定义Ruby语法的地方。

正如其他人已经指出的那样,你无法在Ruby中定义自己的运算符。 运算符集是预定义和修复的。 您所能做的就是通过响应相应的消息来影响某些现有运算符(即转换为消息发送的运算符)的语义

但是,当然,您可以非常轻松地实现but 方法

 class Object def but self && yield end end Object.new.but { not true }