2

所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将布尔值的值更改为 true,如果它是 0 或 2,则更改为 false。由于我来自 Java 背景,我认为这代码应该工作:if n == 1 || n == 3

但事实并非如此。所以我的问题是,是否可以在 Ruby 的 If 块中使用“或”表达式?我知道我目前的情况可以通过以下方式轻松解决:

if n == 0
    t_o_f = false
elsif n == 1
    t_o_f = true

等等。但我想知道将来是否可以在 If 块中使用 Or 。

4

3 回答 3

3

是的,任何表达式都可以在if条件中使用,包括那些使用||(逻辑或)运算符的表达式。

与 Java 一样,Ruby 的||运算符也会短路。也就是说,如果左侧为真,则不评估右侧。

惯用的 ruby​​ 使用后缀 if用于单行:

puts "Yes" if n == 4 || n == 5

但是,如果行很长,请避免使用后缀,并将其分成多行:

if n == 4 || n == 5
  puts "This is a big long string to be output....................."
end

那是因为后缀 if可能会在长行的末尾失去视觉效果。

可以使用带有前缀 if的单行代码,但这种情况并不常见:

if n == 4 || n == 5 then puts "foo" end

也许:

if n == 4 || n == 5 ; puts "foo" ; end

如果浓缩成一条线,这确实是一条多线;分号充当换行符。

在测试多种条件时,有时使用它可能很有价值Array#include?

puts "foo" if [4, 5].include?(n)

仅在两个条件下,此值的价值并不大。对于三个或更多,它读起来很好。

于 2012-10-18T15:48:04.033 回答
1

or 运算符有效,您也可以编写关键字:

if n==1 or n==2
end

http://www.tutorialspoint.com/ruby/ruby_operators.htm

你也可以这样写你想要的:

x = (n%2) ? true : false
于 2012-10-18T15:49:24.703 回答
0

除了@Wayne Conrad:如果几乎没有“逻辑”来决定 n 是真还是假,那么这也是一个不错的选择:

result = case n
  when 1, 3 then true
  when 0, 2 then false
end
于 2012-10-18T20:52:06.423 回答