如何在Ruby中使脚本工作?

时间:2016-04-22 20:04:38

标签: ruby

我是Ruby新手。 我需要让这个脚本工作:

puts "Do you like cats?"
ask = gets

def ask(n)

 if ask == yes
   return "I do too"
 end

 if ask == no
   return "Dogs are better"
 end
end

puts "#{ask(n)}"

错误信息是:

  

pracif.rb:15:在<main>': undefined local variable or method n'中   main:Object(NameError)

3 个答案:

答案 0 :(得分:2)

这是一个适合您的脚本:

puts "Do you like cats?"
answer = gets

def ask(n)

 if n == 'yes'
   return "I do too"
 end

 if n == 'no'
   return "Dogs are better"
 end
end

puts ask(answer.downcase.chomp)

<强>释

  1. 正如错误所说,您试图传入未定义的变量n

  2. 其次,您的方法名称ask与变量名称相同。我已将变量重命名为answer而不是

  3. 第三,将yesno括在引号中

  4. 最后,由于您使用的是gets\n会附加yes\n,因此您的所有条件都不会匹配。所以我使用chomp删除了\n。并且还使用downcase使输入不区分大小写。

  5. 修改

    正如@Jordan在评论中所提到的,没有理由对puts语句使用字符串插值。所以直接调用该方法就足够了。

答案 1 :(得分:0)

您的脚本没有定义n本地变量,您最后会传递给ask(n)方法。

将脚本ask的{​​{1}}变量从用户重命名为gets,并将其传递给最后的answer方法,如下所示:

更新了代码以解决我在第一次运行中没有看到的其他问题。

ask

答案 2 :(得分:0)

您的代码存在许多问题。尝试更像:

def reply(response)
 return 'I do too' if response == 'yes'
 return 'Dogs are better' if response == 'no'
 'Invalid response!'
end

puts 'Do you like cats?'
response = gets().chomp()
puts reply(response)

注意变量名称。如果你保持描述性,就更容易发现错误。