2016-11-30 158 views
2

我用Ruby是一个新手,我不知道为什么在这种情况下语句具有这样的比较:Case语句,并与整数

def evaluate(number) 
    case 
    when number<0 
    puts "#{number} is negative" 
    when 0..50 
    puts "#{number} is between 0 and 51" 
    when 51..100 
    puts "#{number} is between 51 and 100" 
    else 
    puts "#{number} is greater than 100" 

    number = gets.chomp.to_i 

    puts evaluate(number) 

路过的时候-4例如它的工作原理,但如果我添加号码的情况下

def evaluate(number) 
    case number 
    when number<0 ... 

然后将其解释为负值,因为如果是一个else,并打印出大于100

是否有再这是不是?如果有人能够帮助我,我会非常感激

+0

此代码看起来不完整,就像缺少一些'end'语句。用于缩进足够的Python? – tadman

回答

5

试试这个。

def evaluate(number) 
    case number 
    when -Float::INFINITY...0 
    puts "#{number} is negative" 
    when 0..50 
    puts "#{number} is between 0 and 51" 
    when 51..100 
    puts "#{number} is between 51 and 100" 
    else 
    puts "#{number} is greater than 100" 
    end 
end 

puts evaluate(-43) 
# -43 is negative 
puts evaluate(0) 
# 0 is between 0 and 51 
puts evaluate(27) 
# 27 is between 0 and 51 
puts evaluate(100) 
# 100 is between 51 and 100 
puts evaluate(9999) 
# 9999 is greater than 100 

另外,因为case语句使用===的比较,你可以写

def evaluate(number) 
    case 
    when number < 0 
    puts "#{number} is negative" 
    when (0..50) === number 
    puts "#{number} is between 0 and 51" 
    when (51..100) === number 
    puts "#{number} is between 51 and 100" 
    else 
    puts "#{number} is greater than 100" 
    end 
end 

这实际上是什么在上面提出的第一个case语句发生。

请参阅Range#===:“如果obj [参数]是范围的元素,则返回true,否则返回false。”换句话说,(1..10) === numbertrue当且仅当(1..10).include?(number)

我不主张这种选择;我介绍了它帮助显示病例陈述中发生了什么。以下是我认为更好的一种选择。

def evaluate(number) 
    case 
    when number < 0 
    puts "#{number} is negative" 
    when number <= 50 
    puts "#{number} is between 0 and 51" 
    when number <= 100 
    puts "#{number} is between 51 and 100" 
    else 
    puts "#{number} is greater than 100" 
    end 
end 
+2

而不是三等于,那么'(x..y).include?(z)'?这是一种更常见的模式,因为它适用于Array,Set等。 – tadman

+0

@tadman,我同意,并提到在与'Range#==='的文档相关时:'(1..10)=== number'是当且仅当'(1..10)时为真。包括哪些内容?(数字)'。你当然可以使用它。 –

+0

非常感谢!两者都很好,但我想最后一个人是最好的。我会继续学习 – Ima