Ruby 产量本身和产量之间的差异?

Ruby 产量本身和产量之间的差异?,ruby,yield,self,Ruby,Yield,Self,有谁能帮我理解“屈服自我”和“屈服”之间的区别吗 yield self进入块,与方法调用关联,将当前对象作为参数传递给块,普通的yield只进入块而不传递任何参数。在yield self的情况下,self是传递给块的参数。使用simplyyield,不传递任何参数自我在这里并不特殊,任何东西都可以产生,例如 class Foo def a() yield self end def b() yield end def c() yield "Bar" end def d() yiel

有谁能帮我理解“屈服自我”和“屈服”之间的区别吗


yield self
进入块,与方法调用关联,将当前对象作为参数传递给块,普通的
yield
只进入块而不传递任何参数。

yield self
的情况下,
self
是传递给块的参数。使用simply
yield
,不传递任何参数<代码>自我在这里并不特殊,任何东西都可以产生,例如

class Foo
  def a() yield self end
  def b() yield end
  def c() yield "Bar" end
  def d() yield 1, 2, "scuba" end
  def to_s() "A!" end
end

Foo.new.a {|x| puts x } #=> A!
Foo.new.b {|x| puts x } #=> (a blank line, nil was yielded)
Foo.new.c {|x| puts x } #=> Bar
Foo.new.d {|x, y, z| puts z } #=> scuba

yield
视为调用块,
yield self
以当前实例作为参数调用块。

如果传递给块的参数不止一个,该怎么办?Self是它们的数组吗?
Self
是对实例的引用,但正如我所说,这里没有什么特别的。本质上,将yield视为一种接受任何参数并将其传递给块的方法。有关多个参数,请参见编辑。感谢您的解释。让我检查一下我的理解,所以当我们使用self时,x被指定为当前对象引用。但是如果我们不使用self,那么x不会被分配给任何对象。是的,将块视为一种方法,并将
作为该方法的调用,这可能会有所帮助。块
{| x,y | x+y}
定义fn(x,y)x+y端
非常相似。如果在没有参数的情况下调用
fn
fn()?
class Foo
  def a() yield self end
  def b() yield end
  def c() yield "Bar" end
  def d() yield 1, 2, "scuba" end
  def to_s() "A!" end
end

Foo.new.a {|x| puts x } #=> A!
Foo.new.b {|x| puts x } #=> (a blank line, nil was yielded)
Foo.new.c {|x| puts x } #=> Bar
Foo.new.d {|x, y, z| puts z } #=> scuba