Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 符号是如何将参数传递到“to proc as”中的;“obj”是什么—;接收方法(&;:方法)_Ruby_Proc - Fatal编程技术网

Ruby 符号是如何将参数传递到“to proc as”中的;“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

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,*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完全相同。