2014-12-06 2 views
5

Я знаю, что методы в Ruby не объекты, а procs и лямбды. Есть ли разница между ними, кроме этого? Потому что мы можем обойтись. Что делает объекты proc отличными от метода?В чем разница между методом и объектом proc?

Метод:

1.8.7-p334 :017 > def a_method(a,b) 
1.8.7-p334 :018?> puts "a method with args: #{a}, #{b}" 
1.8.7-p334 :019?> end 
1.8.7-p334 :021 > meth_ref = Object.method("a_method") 
=> #<Method: Class(Object)#a_method> 
1.8.7-p334 :022 > meth_ref.call(2,3) 

Proc объект:

a = lambda {|a, b| puts "#{a}, #{b}"} 
    a.call(2,3) 
+0

Не прошу прощения и лямбда. Я прошу разницу между методом и объектом proc. –

+0

, не понимая, как они могут быть отмечены как дубликаты :(Я пропустил много ответов. Ответит ли мой вопрос? –

+0

Не должно быть: 'a = Proc.new {| a, b | puts" # {a}, # {b} "}' Я думаю, что название вопросов означает, что мы говорим о «Proc [s]», а не «lambda». –

ответ

5

Вы сказали, что в вашем вопросе, что «методы не являются объектами», но вы должны быть осторожны, чтобы различать «метод» и «метод».

«Метод» - это определенный набор выражений, которому дается имя и помещается в таблицу методов определенного класса для последующего легкого поиска и выполнения.

Объект «Метод» (или аналогично объект «UnboundMethod») является фактическим объектом Ruby, созданным путем вызова method/instance_method/и т. Д. И передачи имени «метода» в качестве аргумента.

Возможно, вам будет полезно ознакомиться с документацией RDoc для UnboundMethod, Method и Proc. Страницы RDoc перечисляют различные методы экземпляров, доступные для каждого типа.

В основном, Method объект «привязан» к объекту, так что self указывает на тот объект, когда вы call метод, и Proc не имеет такого поведения; self зависит от контекста, в котором был создан/вызван Proc.

+0

В каких ситуациях мы используем метод для создания метода? –

2

Различие между блоками и проками

  1. Проками являются объекты, блоки не
  2. В лучшем случае один блок может аг в списке аргументов

Различия между проки и лямбды

  1. Лямбда проверить количество аргументов, а прок не
  2. Лямбда и прок лечения return ключевое слово по-разному

Это очень хорошо объяснено здесь (я только что скопировал это по ссылке ниже)

http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/

+2

Здесь я не прошу прок, лямбда и блок. Я хочу знать разницу между методом и объектом proc –

+0

@ Kranthi Простите, я пропустил вас. Я исправлю свой ответ, как только вернусь домой. – Verhaeren

+1

Это будет большой помощью для меня! большое спасибо!. –

Смежные вопросы