2013-03-17 4 views
1

В книге Программирование Ruby: Прагматический Программисты Руководство Дэйв Томас с Чадом Фаулер и Энди Хант, о создании Proc s есть сноска, что гласит:Какая из них - рубиновая усталость?

«Там на самом деле третий, прок , но он фактически не рекомендуется ».

Я не мог найти способ. Я отдаю себе отчет в следующих способов создать Proc:

b = lambda { | msg | puts "msg: #{msg}" } 
b.call("hi") 
def create_block_object(&block) 
    block 
end 
b = create_block_object{ |msg| puts "msg: #{msg}" } 
b.call("hello") 
b = Proc.new { |msg| puts "msg: #{msg}"} 
b.call("hey") 

Я хочу знать, четвертый путь и будет рад, если кто-нибудь даст мне ответ.

+0

Не могли бы вы привести именно то, что говорит книга? – fmendez

+1

@fmendez благодарит за ответ. Это то, что книга говорит на сноске '6. Фактически есть третий, proc, но он эффективно устарел. « @sawa большое спасибо за редактирование – Davit

+2

Номер 1 устарел с Ruby 1.9 в пользу обозначений в ответе Дэвидрака. – sawa

ответ

1

Книга, которую вы имеете в виду на Ruby 1.8.

В этой версии Ruby lambda и procs являются фактически псевдонимами, а Proc - это другой зверь. Это, очевидно, вводит в заблуждение, поэтому не рекомендуется использовать proc как в

prc = proc {|x, y| puts x + y} 

Этот синтаксис считается устаревшим и рекомендуется использовать лямбда в этом случае.

Это больше не относится к поздним версиям Ruby, начиная с 1.9.

+1

спасибо, я узнал, что вы были правы, так как книга никогда не упоминала метод, который вы предоставили – Davit

+1

Собственно, 'Kernel # proc' is эквивалентно 'Kernel # lambda' перед Ruby 1.9, и эквивалент' Proc.new' в 1.9 (не уверен около 2.0). По этой причине черные предостерегают от его использования (поскольку семантика лямбда и не-лямбда 'Procs' различна). Это написано в сноске в разделе «Блоки, замыкания и объекты Proc» в главе 22 («Язык Ruby»). – echristopherson

1

Это еще один синтаксис для лямбды:

b = ->(msg) { puts "msg: #{msg}" } 
b.call("hi") 
+0

спасибо, я знаю, что это также присутствует с Ruby 1.9, и это не очень устарело, я думаю, – Davit

0

prc = proc {| x | x * x} обесценивается.

Этот синтаксис был главным образом использован в версиях Ruby-1.8.7.