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

Rus*_*ell 5 ruby metaprogramming

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

例如,如果我想做某事,x但如果不是y,我必须写一些类似的东西:

if x and not y
Run Code Online (Sandbox Code Playgroud)

但我想写

if x but not y
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*nal 6

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

class Object
  def but(other)
    self and other
  end
end

x.but (not y)
Run Code Online (Sandbox Code Playgroud)

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

  • 更重要的是,这个"解决方案"将始终评估*"x"和"y"(没有短路),并且将以*反向顺序*(`y`然后是`x`)进行评估. (3认同)
  • 我同意.这个答案中最好的部分是不要这样做.+1 (2认同)