嘶嘶嘶嗡声不会使用案例/时间发出嘶嘶声或嗡嗡声



我试图了解如何在Ruby案例/语句中使用条件表达式。该代码似乎应该可以工作,但它仅打印1到100个包含在内,并且切勿打印" Fizz"," Buzz"或" Fizzbuzz"。

#!/usr/bin/env ruby
(1..100).each do |n|
  case n
  when n % 3 == 0 && n % 5 == 0
    puts "FizzBuzz"
  when n % 3 == 0
    puts "Fizz"
  when n % 5 == 0
    puts "Buzz"
  else
    puts n
  end
end

我很确定我缺少一些明显和愚蠢的东西,但是文档似乎表明这应该起作用。它非常相似的例子是:

a = 2
case
when a == 1, a == 2
  puts "a is one or two"
when a == 3
  puts "a is three"
else
  puts "I don't know what a is"
end

我的红宝石版本是:

ruby 2.1.6p336 (2015-04-13 revision 50298) [x86_64-linux]

和完整性,输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

如果要在when中放置任意条件,则需要将表达式放在case

(1..100).each do |n|
  case
  when n % 3 == 0 && n % 5 == 0
    puts "FizzBuzz"
  when n % 3 == 0
    puts "Fizz"
  when n % 5 == 0
    puts "Buzz"
  else
    puts n
  end
end

执行case n ... when boolean 时,只有在n本身等于布尔结果时,才会触发,即truefalse,而不是数字。当您执行case ... when没有n时,这就是触发真正的when的原因。

您的问题是因为您有case n,而不仅仅是case。如果将其取出,它将起作用。

(1..100).each do |n|
  case
  when n % 3 == 0 && n % 5 == 0
    puts "FizzBuzz"
  when n % 3 == 0
    puts "Fizz"
  when n % 5 == 0
    puts "Buzz"
  else
    puts n
  end
end

case之后放置变量会导致其检查您在when中放置的条件。您提供的链接实际上处理了这种特定情况,您发布的代码之前的行说:

使用案例表达式的另一种方法就像if-esif表达式

最新更新