2016-08-14 50 views
0

有人能告诉我为什么这个Ruby on Rails解决方案无论控制台写了什么,都会返回IF语句的输出吗? (如果回答提出的问题“在西班牙”你还得到一个“卓悦!”回报...if/elsif/else Ruby错误

作业2:全球问候

询问用户他们将如何 喜欢迎接。

如果他们说:“在法国”,回应 与“卓悦!”

如果他们说:“在西班牙”,以回应 “HOLA!”

如果他们说:“南非荷兰语”,回应 与 “喂!”

处理所有其他的输入与 “呃,你好?”

puts "How would you like to be greated?" 
greet = gets.chomp 

if greet = "in French" 
    puts "Bonjour!" 
elsif greet = "in Spanish" 
    puts "Hola!" 
elsif greet = "in Afrikaans" 
    puts "Hallo!" 
else 
    puts "Uh, hi?" 
end 
+0

您正在使用单个等于而不是double等于。将'if greet ='更改为'if greet ==' –

回答

5

随着=您进行分配。

你需要一个==喜欢这里:

puts "How would you like to be greated?" 
greet = gets.chomp 

if greet == "in French" 
    puts "Bonjour!" 
elsif greet == "in Spanish" 
    puts "Hola!" 
elsif greet == "in Afrikaans" 
    puts "Hallo!" 
else 
    puts "Uh, hi?" 
end 

你也可以使用一个case声明:如果您在组合使用正则表达式使用

puts "How would you like to be greated?" 
greet = gets.chomp 

case greet 
when "in French" 
    puts "Bonjour!" 
when "in Spanish" 
    puts "Hola!" 
when "in Afrikaans" 
    puts "Hallo!" 
else 
    puts "Uh, hi?" 
end 

,你也可以搭上不同的拼法或句子:

puts "How would you like to be greated?" 
greet = gets.chomp 

case greet 
when /French/i 
    puts "Bonjour!" 
when /Spanish/i 
    puts "Hola!" 
when /Afrikaans/i 
    puts "Hallo!" 
else 
    puts "Uh, hi?" 
end 
+0

真正的解决方案是'case'语句版本。不知道为什么你要缩进第一个'when',但是。根据几乎所有的Ruby风格指南,''''''''''''''''/'end'应该全部处于相同的缩进级别。有一件事情可以简化这里的表达式,即'case greet.downcase',以避免必须使每个区分大小写。 – tadman

+0

@tadman当我重新编写if/elsif版本时,第一个缩写是偶然的。我改编了它。我的常规例外被定义为不区分大小写(正则表达式中的选项i)。 'case greet.downcase'会使它更加明显。 – knut

+0

是的,我的意思是说,你可以'downcase'一次或者多次放入'/ i'。一次做这件事通常更简洁。 – tadman

0

=是一个赋值运算符,==用于比较

if "in French" == "in French" // returns true 
    puts "Bonjour" 
else 
    puts "Uh, hi?" 

value = 10 // assign 10 to the variable value 
puts value //print 10