Ruby 符号是如何将参数传递到“to proc as”中的;“obj”是什么—;接收方法(&;:方法)
receiver_method(&:method)的功能似乎足够清晰,但我发现关于分配给“obj”的解释*中存在漏洞,如——Ruby 符号是如何将参数传递到“to proc as”中的;“obj”是什么—;接收方法(&;:方法),ruby,proc,Ruby,Proc,receiver_method(&:method)的功能似乎足够清晰,但我发现关于分配给“obj”的解释*中存在漏洞,如—— class Symbol def to_proc #<parameter notably absent> Proc.new { |obj, *args| obj.send (self, *args) } end end 类符号 def to_proc# Proc.new{| obj,*args| obj.send(self
class Symbol
def to_proc #<parameter notably absent>
Proc.new { |obj, *args|
obj.send (self, *args)
}
end
end
类符号
def to_proc#
Proc.new{| obj,*args|
obj.send(self,*args)
}
结束
结束
这是如何将接收方方法的object/passed参数指定为“obj”的
* * 如何将参数作为
“obj”
传递到#to_proc
<代码>接收方法(&:方法)
符号在任何地方都不会传递任何信息。将参数转换为proc
实例,隐式调用以对其执行\u proc
。并将结果作为块传递给调用方
让我们继续举一个例子:
%w[42 foo].map(&:to_i)
#⇒ [42, 0]
这是怎么回事
•to_i
正在转换为proc
,如您在OP中所示
# ⇓⇓⇓⇓⇓
proc { |obj, *args| obj.send(:to_i, *args) }
•我们将这个proc
传递给调用者(为了清晰起见,我会使用块语法编写它,但不会失去通用性)
%w[42 foo].map do |obj, *args|
obj.send(:to_i, *args)
end
•注意!*args
在这里是不正确的,因为map
将单个参数传递给块:
%w[42 foo].map do |obj|
obj.send(:to_i)
end
这将映射到:
'42' → '42'.send(:to_i) ≡ '42'.to_i → 42,
'foo' → 'foo'.send(:to_i) ≡ 'foo'.to_i → 0,
屈服:
#⇒ [42, 0]
receiver方法*实际上调用proc(而不是屈服于),我收集到?我首先链接的问题是“用作方法的块”*一种称为调用者的特定类型的方法?屈服于块与调用proc完全相同。