ruby многострочный оператор возвращает значение, отличное от встроенного оператора - PullRequest
0 голосов
/ 25 февраля 2020

Я внес ошибку в свой исходный код, просто разделив операторы join / map / split. Я не могу понять, почему это происходит. Любая идея, почему это происходит и как заставить func2 действовать как func1?

def func1(params)
  params.split('&').map { |str| str.split('=').last }.join('-')
end

def func2(params)
  params.split('&')
        .map { |str| str.split('=').last }
        .join('-')
end

func1("a=1&b=2&c=3") # "1-2-3"
func2("a=1&b=2&c=3") # ["a=1", "b=2", "c=3"]

1 Ответ

0 голосов
/ 25 февраля 2020

Для чего это стоит, я могу воспроизвести с Ruby 2.6.3 и Прай 0.12.2:

[1] pry(main)> def func1(params)
[1] pry(main)*   params.split('&').map { |str| str.split('=').last }.join('-')  
[1] pry(main)* end  
=> :func1
[2] pry(main)> 
[3] pry(main)> def func2(params)
[3] pry(main)*   params.split('&')  
[3] pry(main)*   .map { |str| str.split('=').last }        
sh: 1: Syntax error: word unexpected (expecting ")")
Error: there was a problem executing system command: map { |str| str.split('=').last }
[3] pry(main)*   .join('-')        
sh: 1: Syntax error: word unexpected (expecting ")")
Error: there was a problem executing system command: join('-')
[3] pry(main)* end  
=> :func2
[4] pry(main)> 
[5] pry(main)> func1("a=1&b=2&c=3") # "1-2-3"
=> "1-2-3"
[6] pry(main)> func2("a=1&b=2&c=3") # ["a=1", "b=2", "c=3"]
=> ["a=1", "b=2", "c=3"]
[7] pry(main)> Pry::VERSION
=> "0.12.2"

Кажется, работает нормально со стандартным IRB:

2.6.3 :001 > def func1(params)
2.6.3 :002?>     params.split('&').map { |str| str.split('=').last }.join('-')
2.6.3 :003?>   end
 => :func1 
2.6.3 :004 > 
2.6.3 :005 > def func2(params)
2.6.3 :006?>     params.split('&')
2.6.3 :007?>           .map { |str| str.split('=').last }
2.6.3 :008?>           .join('-')
2.6.3 :009?>   end
 => :func2 
2.6.3 :010 > 
2.6.3 :011 > func1("a=1&b=2&c=3") # "1-2-3"
 => "1-2-3" 
2.6.3 :012 > func2("a=1&b=2&c=3") # ["a=1", "b=2", "c=3"]
 => "1-2-3"

Изменение на

def func2(params)
  params.split('&').map do |str|
    str.split('=').last
  end.join('-')
end

решает проблему в Pry.

Эта проблема («Нужен простой способ вставить многострочный код») может быть связанным.

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