Подтвердить что ты не робот

Функции Ruby и методы

В языке программирования Ruby, глава 6 (второй абзац) говорится:

Многие языки различают функций, которые не связаны объект и методы, которые вызываются на объекте приемника. Потому что Ruby чисто объектно-ориентированный язык, все методы являются истинными методами и являются связанный, по меньшей мере, с одним объектом.

И затем в середине шестого абзаца:

Оба procs и lambdas являются функциями а не методы, объект.

Я немного смущен этими утверждениями. Является ли Ruby действительно чистым OO и, следовательно, не имеет функций, которые не связаны с объектами (если это допустимое определение чистого OO) или являются procs/lambdas, связанными с объектом Proc? В чем разница между функциями и методами в Ruby?

Любая помощь в анализе и понимании этого будет оценена.

4b9b3361

Ответ 1

lambda в Ruby - это объекты класса Proc. Объекты Proc не принадлежат ни одному объекту. Они вызываются без привязки их к объекту.

Методы - это объекты класса Method или UnboundMethod, в зависимости от того, связаны они или не связаны. См. Объяснение здесь. Unbound методы не могут быть вызваны, пока они не привязаны к объекту.

lambda{|x| x}.class      # => Proc
lambda{|x| x}.call(123)  # => 123

class Foo
  def bar(baz)
    baz
  end
end

puts Foo.new.method(:bar).class     # => Method
puts Foo.new.method(:bar).call(123) # => 123

puts Foo.instance_method(:bar).class     # => UnboundMethod
puts Foo.instance_method(:bar).call(123) # => throws an exception

Вы можете bind a UnboundMethod к объекту, а затем вызвать его. Но вы не можете bind a Proc на объект вообще. Однако объекты Proc могут захватывать локальные переменные в окружающем пространстве, становясь закрытыми.

Ответ 2

Procs и lambdas - оба объекта для себя, с помощью метода call, который фактически вызывает блок, связанный с proc (или лямбдой). Однако Ruby предоставляет некоторый синтаксический сахар, чтобы вызывать их без явного вызова call.

Ответ 3

Я думаю, что различие между методами и функция первого порядка, т.е. функции, которые могут передаваться как значения.