2014-04-01 40 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