定义自定义Ruby运算符

时间:2012-08-08 23:15:06

标签: ruby operators metaprogramming

问题是:我可以在Ruby中定义我的自定义运算符,除了在 “Operator Expressions”?

例如:1 %! 2

3 个答案:

答案 0 :(得分:6)

是的,虽然有一些警告,但可以创建自定义运算符。 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示例。 Documentation有完整的详细信息,但无法为Fixnums提供支持者,!不能使用支持者。

答案 1 :(得分:4)

没有。您只能定义已在ruby,+, - ,!,/,%等中指定的运算符(您看到了列表)

你可以亲眼看到这不起作用

def HI
  def %!
    puts "wow"
  end
end

这主要是因为语法解析器必须扩展为使用新运算符接受任何代码。


正如Darshan所提到的那样,这个例子可能不足以实现潜在的问题。相反,让我们仔细看看解析器如何使用此运算符处理一些示例代码。

3 %! 0

虽然我的间距很明显,这应该是3.%!(0)而没有间距会变得更难看。

3%!也可以被视为3.%(0.!)解析器不知道选择哪个。目前,没有办法轻松告诉它。相反,我们可能希望覆盖3.%(0.!)的含义,但这并不完全定义一个新的运算符,因为我们仍然只限于ruby的可解析符号

答案 2 :(得分:1)

您可能无法在 Ruby中执行此操作,只能通过修改Ruby本身。我认为修改parse.y将是你最好的选择。 parse.y famtour