定义自定义Ruby运算符
问题是:我可以在Ruby中定义自己的自定义运算符,除了“ 运算符表达式 ”中的自定义运算符吗?
例如: 1 %! 2
1 %! 2
是的,虽然有一些警告,但可以创建自定义运算符。 Ruby本身并不直接支持它,但是superators gem在将操作符链接在一起时做了一个聪明的技巧。 这允许您创建自己的运算符,但有一些限制:
$ gem install superators19
然后:
require 'superators19' class Array superator "%~" do |operand| "#{self} percent-tilde #{operand}" end end puts [1] %~ [2] # Outputs: [1] percent-tilde [2]
由于上述限制,我无法做到1 %! 2
1 %! 2
例子。 文档有完整的详细信息,但Fixnums不能给一个superator,并且!
不能在一个superator。
不可以。您只能定义已在ruby,+, – ,!,/,%等中指定的运算符(您看到了列表)
你可以亲眼看到这不起作用
def HI def %! puts "wow" end end
这主要是因为语法解析器必须扩展为使用新运算符接受任何代码。
正如Darshan所提到的那样,这个例子可能不足以实现潜在的问题。 相反,让我们仔细看看解析器如何使用此运算符处理一些示例代码。
3 %! 0
虽然我的间距很明显,这应该是3.%!(0)
没有间距,它变得更难看。
3%!
也可以看作3.%(0.!)
解析器不知道选择哪个。 目前,没有办法轻松告诉它。 相反,我们可能希望覆盖3.%(0.!)
的含义,但这并不完全定义一个新的运算符,因为我们仍然只限于ruby的可解析符号
您可能无法在 Ruby中执行此操作,但只能通过修改Ruby本身。 我认为修改parse.y将是你最好的选择。 parse.y famtour