2016-04-22 27 views
1

私は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」で:オブジェクト(NameError)

+0

引用符 'no'と 'yes'とそのn == "yes" n == "no" not ask == –

+0

下部にリンクされているページを含む[ask]と "[mcve ] "。 –

答えて

3

ここではあなたのために働くだろうスクリプトです:

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があります。あなたがそうあなたの条件のいずれもが一致しないだろうyes\nのように追加さgets\n取得を使用しているので、私は、代わりに

  3. は第三に、引用符
  4. そして最後でyesnoを囲むanswerに変数の名前を変更しました。だからchompを使って\nを削除しました。入力の大文字と小文字を区別しないようにするにはdowncaseも使用しました。

コメントで@Jordanで述べたようにEDIT

、プット文の文字列補間を使用する理由はありません。メソッドを直接呼び出すだけで十分です。

+0

ええ、今それは動作します!どうもありがとう。私はそれを答えとして受け入れます。 – user3043926

+0

'puts"#{foo} "'を実行する理由は決してありません。 '#{...}'は文字列補間用です。 '#{ask(...)} 'の' 'Hello、#{name}' 'のような他のコンテンツを持つ文字列に値を補間することはできません。 'puts ask(...)。to_s'を実行します。しかし、この場合、 'ask'は常に文字列を返すので、' to_s'は必要ありません。さらに、 'puts'は引数に' to_s'を自動的に呼び出します。したがって、 'to_s'もここでは不要です。ちょうど 'puts ask(...)'をしてください。 –

+0

@Jordanありがとう、私はそれを逃していた。私は今答えを更新しました。 – Alfie

1

あなたのスクリプトにはnローカル変数が定義されておらず、最後にask(n)メソッドに渡しています。

例えばanswerへのユーザーからスクリプトgetsとはそうのように末尾にあなたのaskメソッドに渡しているあなたのask変数の名前を変更します。

更新されたコードを、私は最初の実行では表示されませんでした他の問題を解決するために。

puts "Do you like cats?" 
answer = gets.chomp 

def ask(n) 
    (n == 'yes') ? "I do too" : "Dogs are better" 
end 

puts "#{ask(answer)}" 
+0

それでもエラーが表示されます。しかし、助けてくれてありがとう。 – user3043926

+0

これは動作しません。このレスポンスには多くの問題があります。 – jbeck

+0

は、値 'yes'と' no'を引用符で囲みたいかもしれません。 – Alfie

1

コードにはいくつかの問題があります。

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) 

変数名に注意してください。説明的に記述すれば、間違いを見つけやすくなります。

+0

私はそれが好きです。しかし、「はい」または「いいえ」と入力すると「無効な応答」と表示されます。 。 。 – user3043926

+0

ああ。いいですよ。 'chomp()'コールはそれを修正すべきです。 'gets()'は、ユーザ入力から改行を取得しました。 – jbeck

関連する問題