2011-03-17 69 views
5

所以我正在通过Ruby Koans,我遇到了一个我认为特定于ruby 1.9.x的问题。我可以在Ruby 1.9.x中使用无参数函数吗?

def test_calling_global_methods_without_parentheses 

    result = my_global_method 2, 3 
    assert_equal 5, result 
end 

我得到这个:

[email protected]:~/code/ruby_projects/ruby_koans$ rake 
(in /home/james/code/ruby_projects/ruby_koans) 
cd koans 
/home/james/.rvm/rubies/ruby-1.9.2-p180/bin/ruby path_to_enlightenment.rb 
/home/james/code/ruby_projects/ruby_koans/koans/about_methods.rb:21:in `eval': (eval):1: syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '(' (SyntaxError) 
assert_equal 5, my_global_method 2, 3 
           ^
    from /home/james/code/ruby_projects/ruby_koans/koans/about_methods.rb:21:in `test_sometimes_missing_parentheses_are_ambiguous' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:377:in `meditate' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:449:in `block in walk' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:460:in `block (3 levels) in each_step' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:458:in `each' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:458:in `block (2 levels) in each_step' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:457:in `each' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:457:in `each_with_index' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:457:in `block in each_step' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:455:in `catch' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:455:in `each_step' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:448:in `walk' 
    from /home/james/code/ruby_projects/ruby_koans/koans/edgecase.rb:470:in `block in <top (required)>' 
rake aborted! 
Command failed with status (1): [/home/james/.rvm/rubies/ruby-1.9.2-p180/bi...] 
/home/james/code/ruby_projects/ruby_koans/Rakefile:86:in `block in <top (required)>' 
(See full trace by running task with --trace) 
[email protected]:~/code/ruby_projects/ruby_koans$ 

我看了在GitHub上声称最近完成了Koans(在过去的2个月)的几个不同的版本库,我只是完成看到了我使用的答案(第一段代码片段)。那么,这是与我的代码,我的Ruby安装或其他东西?

回答

9

您得到的错误不是您列出的代码;它来自它下面的代码。相关文件的See line 20。该票据说:

注意:我们使用下面的eval因为示例代码被认为是语法上是无效

+3

谢谢!这也是一个提醒,我*真的*需要阅读更多的错误... – jrg 2011-03-18 00:21:15

3

我不知道为什么,但是代码被这样的评价:

def test_calling_global_methods_without_parentheses 
    assert_equal 5, my_global_method 2, 3 
end 

的问题是,这是ambiguos,可能意味着assert_equal(5, my_global_method(2, 3))assert_equal(5, my_global_method(2), 3)。在这个特定的情况下,你必须使用圆括号。

1

不要忘了删除方法调用和第一个参数之间的空间。

做这个

eval "assert_equal 5, my_global_method(2,3)"

,而不是

eval "assert_equal 5, my_global_method (2,3)" #beware of the space!

相关问题