红宝石模数。为什么这两个总和打印出不同的答案?

时间:2016-11-12 13:08:25

标签: ruby-on-rails ruby

我正在学习ruby并且在使用%Modulus总和时遇到了问题。

puts "example #{101 % 4}"

以上在终端打印1,这是我的预期。

为什么下面打印101在终端?当然和上面一样吗?

puts "example #{100 + 1 % 4}"

据我所知,%只是另一种说法'X除以Y而剩下的J“。所以第二个例子肯定也应该返回1?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

括号很重要。由于运算符优先级规则,第二个示例被ruby视为

100 + (1 % 4)

哪个给出了

100 + 1

等于101

你可能意味着

(100 + 1) % 4

答案 1 :(得分:3)

因为%的优先级高于+。所以你可以做类似

的事情
puts "example #{(100 + 1) % 4}"

答案 2 :(得分:2)

正如所指出的那样,它与运算符优先级有关,例如,您可以使用括号()来控制运算符优先级。 Ruby的rules在官方Ruby文档中概述如下:

  

从最高到最低,这是ruby的优先表。高   优先操作发生在低优先级操作之前。

!, ~, unary +

**

unary -

*, /, %

+, -

<<, >>

&

|, ^

>, >=, <, <=

<=>, ==, ===, !=, =~, !~

&&

||

.., ...

?, :

modifier-rescue

=, +=, -=, etc.

defined?

not

or, and

modifier-if, modifier-unless, modifier-while, modifier-until

{ } blocks

有关顺序或优先顺序的更一般概述(在编程范围之外),请参阅维基百科条目here

如果有平局会怎样?

值得注意的是,如果存在平局(即计算中有两个具有相同优先级的运算符),则操作将从左向右执行。

考虑:

10 % 3 * 4
#=> 4 
10 * 3 % 4
#=> 2 

10 * 10 / 2 * 4
#=> 200 
10 / 10 * 2 * 4
#=> 8