在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 }