2011-03-17 14 views
5

Así que estoy trabajando en el Ruby Koans, y he encontrado un problema que creo que es específico de ruby 1.9.x.¿Puedo usar funciones sin parámetros en Ruby 1.9.x?

def test_calling_global_methods_without_parentheses 

    result = my_global_method 2, 3 
    assert_equal 5, result 
end 

me sale esto:

[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$ 

He mirado en unos depósitos diferentes en GitHub que afirman haber completado los Koanes recientemente (en los últimos dos meses), y sólo he visto la respuesta (primer fragmento de código) que utilicé. Entonces, ¿es algo con mi código, mi instalación de Ruby o algo más?

Respuesta

9

El error que está recibiendo no es del código que enumeró; es del código debajo de él. See line 20 del archivo relacionado. Las notas dicen:

NOTA: Estamos utilizando eval a continuación debido a que el código de ejemplo considera que es válida sintácticamente

+3

Gracias! Eso también es un recordatorio de que * realmente * necesito leer más sobre los errores ... – jrg

3

no sé por qué, pero el código está siendo evaluado como esto:

def test_calling_global_methods_without_parentheses 
    assert_equal 5, my_global_method 2, 3 
end 

El problema es que esto es ambigua, puede significar assert_equal(5, my_global_method(2, 3)) o assert_equal(5, my_global_method(2), 3). En este caso específico, debes usar paréntesis.

1

No se olvide de quitar el espacio entre la llamada al método y el primer parámetro.

Haga esto

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

y no

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

Cuestiones relacionadas