Ruby新手:定义方法

时间:2014-04-01 02:07:58

标签: ruby methods rspec

我试图自学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

我真的不知道出了什么问题。为什么会说'回声&#39;未定义?它看起来像我。我也试过输出&#34;你好&#34;本身而不是方法参数(param)。同样的错误。所有帮助赞赏。此外,如果有人知道更合适的地方我可以获得这种帮助,那就很好。

2 个答案:

答案 0 :(得分:1)

您的计划说明如下:

  

定义名为simon_says的方法。执行该函数时,它应该定义一个名为echo的方法。

因此,在您调用simon_says()之前,echo不存在:

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

现在,我不知道为什么你在def echo内包裹了def simon_says,所以我无法提供任何有用的建议,你应该< / em>做的不是你现在的样子。

答案 1 :(得分:1)

按照你的规格,我猜simon_says是上课。这不是方法。您正在定义方法内部的方法。试试这个

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