我们可以覆盖 Ruby 中的运算符吗?

Can we override operators in Ruby?

在某种情况下...例如

(10 + 20) * 10
=> 300

括号中的表达式片段在更高优先级之前被评估 multiplication.So 它是否适用于其他运算符,因为 well.Can 我覆盖其他运算符,例如 << !...等等

是的,你可以这样做

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

puts "str" << "sss"  

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

10 + 20 * 10 = 300 

这是因为我们作为人类,将 10 添加到 20,得到 30,然后乘以 10 得到 300.让 Ruby 执行相同的计算,您会得到截然不同的答案:

> 10 + 20 * 10
=> 210

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

覆盖运算符优先级

内置于Ruby中的优先级可以通过用括号括起表达式的较低优先级部分来覆盖。例如:

> (10 + 20) * 10
=> 300

在上面的示例中,括号中的表达式片段在更高优先级乘法之前进行计算。

有关更多信息,请参阅:

我希望这能让你明白:)