1

我最初将此代码编写为一系列if语句,但在了解了更多关于 Ruby 的知识后,我决定使用case语句可能更合适。但是,现在它似乎被打破了,我不知道为什么。

location = gets.chomp.downcase

case location
when 'v' || 'vaca'
  file1, file2 = 'vMasterLocation.csv', 'vMasterSR.csv'
when 'c' || 'comm'
  file1, file2 = 'cMasterLocation.csv', 'cMasterSR.csv'
else
  puts "Not a valid location."
  exit
end

location' 的输入为VvC或时,该语句按预期运行c,但每当我尝试输入vacacommRuby 时,都会返回以下内容:csv.rb:1335:in 'initialize': can't convert nil into String (TypeError)

我是否使用||不正确或者我误解了案例陈述?非常感谢任何反馈。谢谢!

此处以之前的形式作为if声明仅供参考:

location = gets.chomp.downcase
if location == 'v' || location == 'vaca'
  file1, file2 = 'vMasterLocation.csv', 'vMasterSR.csv'
elsif location == 'c' || location == 'comm'
  file1, file2 = 'cMasterLocation.csv', 'cMasterSR.csv'
else
  puts "Not a valid location."
  exit
end

case另外,这是对语句的正确“Ruby”使用if吗?我试图弄清楚什么时候使用一个比另一个更合适。

4

2 回答 2

7

使用逗号而不是||

case location
when 'v', 'vaca'

有关 case 语句的语法的更多信息,请参见此处

于 2011-11-23T04:26:38.450 回答
1

试试这个:

location = gets.chomp.downcase

case location
when 'v', 'vaca'
  file1, file2 = 'vMasterLocation.csv', 'vMasterSR.csv'
when 'c', 'comm'
  file1, file2 = 'cMasterLocation.csv', 'cMasterSR.csv'
else
  puts "Not a valid location."
  exit
end
于 2011-11-23T04:28:17.207 回答