2014-04-01 57 views
0

我想教自己Ruby。我不認識任何人,所以我沒有人可以幫助解決我非常簡單,也許令人討厭的問題。我運行下面的代碼,並得到以下錯誤:Ruby新手:定義方法

def simon_says (command) 
def echo (param) 
    puts "#{param}" 
end 
end 

錯誤:

PS R:\learn_ruby\03_simon_says> rake 
(in R:/learn_ruby) 
You must use ANSICON 1.31 or later (http://adoxa.3eeweb.com/ansicon/) to use colour on Windows 

Simon says 
    echo 
    should echo hello (FAILED - 1) 

Failures: 

    1) Simon says echo should echo hello 
Failure/Error: echo("hello").should == "hello" 
NoMethodError: 
    undefined method `echo' for #RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x2fb5690> 
# ./03_simon_says/simon_says_spec.rb:19:in `block (3 levels) in <top (required)>' 

Finished in 0.003 seconds 
1 example, 1 failure 

RSpec的代碼可以在這裏找到(Github上):simon_says_spec.rb

我真的有不知道什麼是錯的。爲什麼會說'回聲'是不確定的?它看起來定義給我。我也嘗試輸出「hello」本身而不是方法參數(param)。同樣的錯誤。所有幫助讚賞。另外,如果有人知道更適合的地方,我可以得到這種幫助,那會很好。

+0

什麼是simon_says?它是類或方法。 –

+0

說明使它看起來應該是一種方法。我試着將它作爲一個沒有運氣的課程來運行。我應該練習功能,字符串和默認值。 – Proto

回答

1

你的程序上寫着如下:

Define a method called simon_says . When that function is executed, it should define a method called echo .

因此,你調用simon_says()之前,echo不存在:

echo("foo") 
# NoMethodError 
simon_says("whatever") 
# => nil 
echo("bar") 
# bar 
# => nil 

現在,我不知道爲什麼你包裹def echodef simon_says ,所以我真的不能提供任何有用的建議,你應該做什麼,而不是你沒有w是。

+0

感謝您的評論。我非常感謝你的努力。說明似乎我應該在方法中包裝一個方法。我正在創建一個simon_says方法,它應該執行這個命令列表(可能是類?)。例如,回聲就是其中之一。調用simon_says應該允許我調用該方法的其他數據。或者至少這是我對它的理解。我鏈接到我的完整說明(在github鏈接上的simon_says_spec)。 – Proto

+0

另外你說什麼也不會讓我覺得有意義。該錯誤說定義方法simon_says,然後讓它定義方法回聲。這不是我的代碼嗎?在simon_says中包裝回聲?爲什麼要用另一種方式來包裝呢? – Proto

+0

通常,方法定義不包含在其他方法定義中。你的規範只要求你定義一個'echo'方法。你沒有這個。你有一個名爲'simon_says'的方法,它將定義'echo'是否曾被調用過,事實並非如此。爲了比較,假設您有製作汽車的任務。相反,你製造一輛汽車製造機器人。這是一個失敗,你還沒有一輛車。一旦你打開一個機器人,你可能會有一輛車;但你可能永遠不會打開它,然後,沒有你的車。合理? – Amadan

1

展望你的規格,我猜simon_says是類。這不是方法。你正在定義方法裏面的方法。試試這個

class SimonSays 
    def echo params 
     puts "#{params}" 
    end 
end 
+0

這是我愚蠢的錯誤。 :P –

+0

謝謝你的嘗試。但是這也行不通。正如上面提到的,我唯一的說明是從Github鏈接的_spec.rb文件。我需要做的是創建一個名爲simon_says的函數,並且嵌套在該函數中的是執行其他操作的各種命令。 – Proto

+0

看看這個規範,'simon_says'是一個文件(因爲它提到的唯一的地方是'require'。它不是一個類,它不是一個方法。 – Amadan