我看过http://www.ruby-doc.org/core-2.1.1/Method.html。
我对Method
类的方法有疑问:
name
和original_name
之间的区别是什么?source_loction
会为{3}}提供与红宝石相关的nil
个对象吗?Method
会给方法对象的绑定接收者。 bound receiver是什么意思?无论如何要区分receiver
和def <method_name> ..... end
创建的方法吗?
答案 0 :(得分:0)
name
和original_name
有什么区别?
original_name
会返回aliased methods的原始名称:
def foo; end
alias bar foo
method(:bar).name #=> :bar
method(:bar).original_name #=> :foo
source_loction
会nil
给予红宝石与宝石有关的Method
个对象吗?
source_location
也适用于宝石:
require 'rails'
Rails.method(:version).source_location
#=> [".../ruby/2.1.1/gems/railties-4.1.0/lib/rails/version.rb", 5]
它为本机方法返回nil
,即用C:
method(:puts).source_location #=> nil
我已经看到接收器会给方法对象的绑定接收器。绑定接收器的含义是什么?
绑定方法与特定对象(接收方)相关联,可以调用,例如:
str = "abc"
str.method(:upcase) #=> #<Method: String#upcase>
instance_method
将该方法作为未绑定方法返回:
String.instance_method(:upcase) #=> #<UnboundMethod: String#upcase>
UnboundMethod
没有接收器,也无法调用(没有可以提升的字符串实例)。
无论如何要区分def <method_name> ..... end
和define_method(symbol){block}
创建的方法吗?
我不这么认为。