【发布时间】:2012-08-06 03:46:01
【问题描述】:
问题是:我可以在 Ruby 中定义我的 自己的自定义 运算符,除了 “Operator Expressions”?
例如:1 %! 2
【问题讨论】:
标签: ruby operators metaprogramming
问题是:我可以在 Ruby 中定义我的 自己的自定义 运算符,除了 “Operator Expressions”?
例如:1 %! 2
【问题讨论】:
标签: ruby operators metaprogramming
没有。您只能定义已在 ruby、+、-、!、/、% 等中指定的运算符(您看到了列表)
你自己看看这行不通
def HI
def %!
puts "wow"
end
end
这主要是由于语法解析器必须扩展以接受使用 new 运算符的任何代码。
正如 Darshan 提到的,仅此示例可能不足以解决根本问题。相反,让我们仔细看看解析器如何使用此运算符处理一些示例代码。
3 %! 0
虽然我的间距看起来很明显,这应该是 3.%!(0) 没有间距它变得更难看到。
3%! 也可以看作3.%(0.!) 解析器不知道该选择哪个。目前,没有简单的方法来告诉它。相反,我们可能希望覆盖 3.%(0.!) 的含义,但这并不完全是定义一个新的运算符,因为我们仍然仅限于 ruby 的可解析符号
【讨论】:
var%! 有什么作用。这是var.send(:%).send(:!) 还是var.send(:%!)。这有意义吗?
var.%!=("one")?
€?
您可能无法在 Ruby 中做到这一点,只能通过修改Ruby 本身。我认为修改 parse.y 将是你最好的选择。 parse.y famtour
【讨论】:
是的,可以创建自定义运算符,但有一些注意事项。 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 指定超级节点,并且 ! 不能在超级节点中。
【讨论】: