Могу ли я использовать функции без параметров в Ruby 1.9.x? - PullRequest
5 голосов
/ 18 марта 2011

Итак, я работаю через Ruby Koans , и я столкнулся с проблемой, которая, на мой взгляд, относится только к ruby 1.9.x.

def test_calling_global_methods_without_parentheses

    result = my_global_method 2, 3
    assert_equal 5, result 
end

Я понял:

james@tristan:~/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)
james@tristan:~/code/ruby_projects/ruby_koans$

Я просмотрел несколько различных репозиториев на GitHub, которые утверждают, что недавно завершили Коаны (в последние два месяца), и я видел только тот ответ (фрагмент первого кода), который я использовал. Итак, это что-то с моим кодом, моей установкой Ruby или чем-то еще?

Ответы [ 3 ]

9 голосов
/ 18 марта 2011

Ошибка, которую вы получаете, не из кода, который вы перечислили; это из кода под ним. См. Строку 20 соответствующего файла. В записках говорится:

ПРИМЕЧАНИЕ: мы используем eval ниже, потому что пример кода считается синтаксически недействительным

3 голосов
/ 18 марта 2011

Не знаю почему, но код оценивается так:

def test_calling_global_methods_without_parentheses
  assert_equal 5, my_global_method 2, 3
end

Проблема в том, что это неоднозначное значение, может означать assert_equal(5, my_global_method(2, 3)) или assert_equal(5, my_global_method(2), 3). В этом конкретном случае вы должны использовать скобки.

1 голос
/ 27 августа 2013

Не забудьте убрать пробел между вызовом метода и первым параметром.

Сделайте это

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

, а не

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...