2016-04-22 74 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 ==「是」n ==「no」不問== == –

+0

請閱讀「[問]」,包括底部鏈接的頁面和「[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相同的變量名稱。我已經改名爲變量來代替answer

  3. 第三,用引號括起來

  4. 最後yesno,因爲你正在使用gets一個\n獲得附加像yes\n所以沒有你的條件將匹配。所以我用chomp刪除\n。並且還使用downcase使輸入大小寫不敏感。

編輯

正如意見中提到的@Jordan,沒有理由使用字符串插值賣出期權聲明。所以直接調用該方法就足夠了。

+0

是的,現在它工作!非常感謝。我會接受它作爲答案。 – user3043926

+0

「puts」#{foo}「'沒有任何理由。 '#{...}'用於字符串插值 - 即。將值插入到具有其他內容的字符串中,例如'「Hello,#{name}」 - 但是在「#{ask(...)}」中沒有其他內容,因此您只是做相當於'放問(...)。to_s'。但在這種情況下,'ask'總是返回一個字符串,所以不需要'to_s'。此外,'puts'自動調用'to_s'參數,所以'to_s'在這裏也是不必要的。只要「放問(...)'。 –

+0

@Jordan謝謝,我錯過了。我已經更新了答案。 – Alfie

1

您的腳本沒有定義局部變量n,您最終將傳遞給您的ask(n)方法。

重命名ask變量腳本gets從用戶到answer例如,並將它傳遞給你的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

好吧,我喜歡它。但如果輸入yes或no,則顯示'無效回覆'。 。 。 – user3043926

+0

啊。好決定。 'chomp()'調用應該可以解決這個問題。 'gets()'從用戶輸入中捕獲換行符。 – jbeck