Ruby on rails 我们可以在Ruby中重写操作符吗?

Ruby on rails 我们可以在Ruby中重写操作符吗?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在某个情况下…例如 (10 + 20) * 10 => 300 括号中的表达式片段在更高优先级的乘法之前求值。它也适用于其他运算符。我是否可以覆盖其他运算符,例如是的,您可以这样做 class String def << str self + "*" + str end end puts "str" << "sss" 类字符串 def当人类计算表达式时,他们通常从表达式的左侧开始计算,然后向右计算。例如,从左到右,我们从以下表达式得到300

在某个情况下…例如

(10 + 20) * 10
=> 300

括号中的表达式片段在更高优先级的乘法之前求值。它也适用于其他运算符。我是否可以覆盖其他运算符,例如
是的,您可以这样做

class String
  def << str
    self + "*" + str
  end
end

puts "str" << "sss"  
类字符串

def当人类计算表达式时,他们通常从表达式的左侧开始计算,然后向右计算。例如,从左到右,我们从以下表达式得到300的结果:

10 + 20 * 10 = 300 
这是因为我们人类将
10
加到
20
,得到
30
,然后乘以
10
,得到
300
。让Ruby执行相同的计算,您会得到一个非常不同的答案:

> 10 + 20 * 10
=> 210
这是运算符优先级的直接结果。Ruby有一组规则,告诉它应该在表达式中按哪个顺序计算运算符。显然,Ruby认为乘法运算符(*)的优先级高于加法(+)运算符

重写运算符优先级 Ruby中内置的优先级可以通过用括号包围表达式的低优先级部分来覆盖。例如:

> (10 + 20) * 10
=> 300
在上面的示例中,括号中的表达式片段在高优先级乘法之前求值

有关更多信息,请参阅:


我希望这能让你明白:)

我不明白这个问题。运算符优先级与(现有)重写运算符的能力有什么关系?您想做什么?