加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Case语句和与整数的比较

发布时间:2020-12-17 04:02:47 所属栏目:百科 来源:网络整理
导读:我是 Ruby的新手,我不知道为什么它在这个case语句中表现得这样: def evaluate(number) case when number0 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
我是 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

这有什么理由吗?如果有人可以帮助我,我会非常感激

解决方法

试试这个.

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

这实际上是上面提到的第一个案例陈述中发生的事情.

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

我不是在提倡这种选择;我提出它是为了帮助显示案例陈述中发生的事情.以下是一个更短的选择,也许读起来更好.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读