如果Ruby运算符';还有什么方法?

如果Ruby运算符';还有什么方法?,ruby,Ruby,Ruby的运算符,如+或*,在语法形式中使用时遵循数学中的优先顺序。在下面的代码中,在+之前调用*: # Syntax-sugar form 5 + 5 * 2 # => 15 在非语法的sugar形式中,方法遵循其编写的线性顺序。在下面的代码中,在*之前调用+: # Non-syntax-sugar form 5.+(5).*(2) # => 20 我定义的方法,如下面的+方法,可以使用语法sugar表单,也可以不使用语法sugar表单: class WackyInt at

Ruby的运算符,如
+
*
,在语法形式中使用时遵循数学中的优先顺序。在下面的代码中,在
+
之前调用
*

# Syntax-sugar form
5 + 5 * 2 # => 15
在非语法的sugar形式中,方法遵循其编写的线性顺序。在下面的代码中,在
*
之前调用
+

# Non-syntax-sugar form
5.+(5).*(2) # => 20
我定义的方法,如下面的
+
方法,可以使用语法sugar表单,也可以不使用语法sugar表单:

class WackyInt
  attr_reader :value     

  def initialize(value)
    @value = value
  end

  def +(other)
    WackyInt.new(value + other.value)
  end
end

ONE = WackyInt.new 1
FIVE = WackyInt.new 5

# As operators
ONE + FIVE # => #<WackyInt @number=-4>
# As methods
ONE.+(FIVE) # => #<WackyInt @number=-4>
类怪人
属性读取器:值
def初始化(值)
@价值=价值
结束
def+(其他)
古怪的新(值+其他值)
结束
结束
一个=古怪的。新的1
五=古怪的新的5
#作为操作员
一加五#=>#
#作为方法
一个.+(五个)#=>#
定义的运算符在语法糖形式和非语法糖形式中遵循各自的优先顺序


Ruby如何解析它?

标记化、解析和分配计算优先级与调用和执行方法是分开的。您可以覆盖的是调用方法时所做的操作。这不会改变Ruby代码的标记化或解析方式,因此计算优先级不会受到影响。

,而不是
,我想Ruby的解析器会识别操作符,并将其转换为方法调用(根据优先级)。接收者是一个文本、一个变量、一个方法调用还是一个常量并不重要。我不确定你到底在问什么——“Ruby是如何解析它的?”你是在问解析器是如何工作的吗?您是否在询问解析器中负责解释
+
操作的确切位置?你对鲁比在这里的行为感到惊讶吗;你有什么不明白的吗?我觉得括号正在影响你的行为。在WacyInt类中尝试将*定义为方法。然后:
#作为运算符p5+2*5#=>@value=15p5+2*5#=>15#作为方法p5.+(2)。*(5)#=>@value=35p5.+(2)。*(5)#=>35#作为方法,没有括号p5.*2.*5#=>@value=15p5.*2.*5#=>15+
字符相关的部分。这回答了你的问题吗?!