Size: a a a

2020 September 01

N

Ni in RubyRush
а можно ссылку?
источник

Э

Эдем in RubyRush
>> def foo(bar)
>> bar.call
>> end
=> :foo
>> lambda_with_break = -> { break }
=> #<Proc:0x000055b4c7e21540@(irb):4 (lambda)>
>> proc_with_break = proc { break }
=> #<Proc:0x000055b4c7e28958@(irb):5>
>> foo(lambda_with_break)
=> nil
>> foo(proc_with_break)
Traceback (most recent call last):
       6: from /home/edem/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `<main>'
       5: from /home/edem/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `load'
       4: from /home/edem/.rvm/rubies/ruby-2.6.6/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
       3: from (irb):7
       2: from (irb):2:in `foo'
       1: from (irb):5:in `block in irb_binding'
LocalJumpError (break from proc-closure)
источник

S

Sergey in RubyRush
Ni
а можно ссылку?
источник

N

Ni in RubyRush
Эдем
>> def foo(bar)
>> bar.call
>> end
=> :foo
>> lambda_with_break = -> { break }
=> #<Proc:0x000055b4c7e21540@(irb):4 (lambda)>
>> proc_with_break = proc { break }
=> #<Proc:0x000055b4c7e28958@(irb):5>
>> foo(lambda_with_break)
=> nil
>> foo(proc_with_break)
Traceback (most recent call last):
       6: from /home/edem/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `<main>'
       5: from /home/edem/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `load'
       4: from /home/edem/.rvm/rubies/ruby-2.6.6/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
       3: from (irb):7
       2: from (irb):2:in `foo'
       1: from (irb):5:in `block in irb_binding'
LocalJumpError (break from proc-closure)
Это понятно, а что нужно сделать, чтобы LocalJumpError не вызывался?
источник

N

Ni in RubyRush
In non-lambda procs, break means exit from the method which the block given for. (and will throw LocalJumpError if invoked after the method returns);
источник

S

Sergey in RubyRush
m1(&proc { break })
я так понимаю что он из метода proc делает break что ли, а не m1
источник

N

Ni in RubyRush
def foo
 Proc.new { break }.call
end

LocalJumpError: break from proc-closure
from (pry):19:in `block in foo'
источник

AN

Alexandr Nikolaev in RubyRush
Какой Ruby мёртв, не ломайте мою детскую психику😁
источник

DG

Denis Gavrilin in RubyRush
Ni
Это понятно, а что нужно сделать, чтобы LocalJumpError не вызывался?
юзать next вроде
источник

E

Eugene in RubyRush
не используйте Proc
источник

E

Eugene in RubyRush
используйте -> (...) { ... } (оно же lambda)
источник

E

Eugene in RubyRush
если хотите из лямбды выйти, то обычный return работает
источник

N

Ni in RubyRush
Eugene
не используйте Proc
так тут вопрос в другом
источник

E

Eugene in RubyRush
если хотите из БЛОКА выйти (это почти Proc, но не совсем - блок это элемент языка, а не тип объекта), то break
источник

S

Sergey in RubyRush
Eugene
не используйте Proc
тут исследовательский интерес
источник

E

Eugene in RubyRush
Ni
так тут вопрос в другом
вопрос в том, что Proc.new это некий артефакт, не предназначенный для обычного конечного пользователя языка
источник

N

Ni in RubyRush
Eugene
вопрос в том, что Proc.new это некий артефакт, не предназначенный для обычного конечного пользователя языка
тут исследовательский интерес
источник

N

Ni in RubyRush
кажется proc { break } всегда рейзит ошибку
источник

N

Ni in RubyRush
и нет такого условия, когда ошибка не возникла бы
источник

N

Ni in RubyRush
Sergey
я вот эту строчку не могу понять в объяснении “if invoked after the method returns”
но этот момент в документации все равно странный и непонятный
источник