rb:29:语法错误,意外的输入结束,期待keyword_end

时间:2014-01-16 00:05:42

标签: ruby

试图找出我收到此错误的原因。

具有If / Else语句的方法不需要结束语句?

另外,不知何故格式化都搞砸了。试了好几分钟来解决。不知道我哪里出错了?

def greeter(name)
  puts "Hello #{name}!!"
end

def by_three?(num)
  if num % 3 == 0
    puts true
   else
    puts false

 def age(n)   
if n < 30
    puts "You are younger than 30!"
else 
    puts "You are older than 30!" 


puts "Enter your name"
your_name = gets.chomp
puts "Enter your age"
yourage = gets.chomp


by_three?(3)
greeter(your_name)
age(your_age)   

3 个答案:

答案 0 :(得分:2)

defif都应该以{{1​​}}:

结束
end

def by_three?(num) if num % 3 == 0 puts true else puts false end end 结尾的Ruby方法应该返回一个布尔值。

您的?只显示by_three?true,但会返回nil。

false

您可以删除看跌期权:

by_three?(5)
# false
# => nil

但是,你的if语句变得多余,也可以删除:

def by_three?(num)
  if num % 3 == 0
    true
  else
    false
  end
end

puts by_three?(3)
# true
# => nil

by_three?(5)
# => false

答案 1 :(得分:0)

正确的写作方式是:

def by_three?(num)
  if num % 3 == 0
     puts true
  else
     puts false
  end # if needs an end
end #def also needs an end

答案 2 :(得分:0)

与您的版本比较:

def greeter(name)
  puts "Hello #{name}!!"
end

def by_three?(num) num % 3 == 0 ? true : false end

def age(n)
  if n.to_f < 30
    puts "You are younger than 30!"
  else puts "You are older than 30!"
  end
end

请注意我已在to_f中将n添加到age,因为它会在保留为字符串时失败,因为chomp会返回字符串而您无法隐式比较stringinteger