问题是:我可以在 Ruby 中定义我自己的自定义运算符,除了“运算符表达式”中的运算符吗?
例如: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]
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.
不可以。您只能定义已在 ruby、+、-、!、/、% 等中指定的运算符(您看到了列表)
你可以亲眼看到这行不通
def HI
def %!
puts "wow"
end
end
这主要是因为必须扩展语法解析器以使用 new 运算符接受任何代码。
正如 Darshan 提到的,仅此示例可能不足以解决潜在问题。相反,让我们仔细看看解析器如何使用此运算符处理一些示例代码。
3 %! 0
虽然我的间距看起来很明显,这应该是3.%!(0)
没有间距的,但它变得更难看到。
3%!
也可以看作是3.%(0.!)
解析器不知道该选择哪个。目前,没有简单的方法来告诉它。相反,我们可能希望覆盖 的含义,3.%(0.!)
但这并不完全是定义一个新的运算符,因为我们仍然仅限于 ruby 的可解析符号
您可能无法在Ruby 中做到这一点,而只能通过修改 Ruby 本身。我认为修改 parse.y 将是你最好的选择。parse.y famtour