5

问题是:我可以在 Ruby 中定义我自己的自定义运算符,除了“运算符表达式”中的运算符吗?

例如:1 %! 2

4

3 回答 3

7

是的,可以创建自定义运算符,尽管有一些警告。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]

Due to the aforementioned limitations, I couldn't do your 1 %! 2 example. The Documentation has full details, but Fixnums can't be given a superator, and ! can't be in a superator.

于 2012-08-09T02:34:45.980 回答
5

不可以。您只能定义已在 ruby​​、+、-、!、/、% 等中指定的运算符(您看到了列表)

你可以亲眼看到这行不通

def HI
  def %!
    puts "wow"
  end
end

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


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

3 %! 0

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

3%!也可以看作是3.%(0.!)解析器不知道该选择哪个。目前,没有简单的方法来告诉它。相反,我们可能希望覆盖 的含义,3.%(0.!)但这并不完全是定义一个新的运算符,因为我们仍然仅限于 ruby​​ 的可解析符号

于 2012-08-08T23:27:44.640 回答
1

您可能无法Ruby 中做到这一点,而只能通过修改 Ruby 本身。我认为修改 parse.y 将是你最好的选择。parse.y famtour

于 2012-08-08T23:38:42.507 回答