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
是传递给块的参数。使用simplyyield
,不传递任何参数<代码>自我在这里并不特殊,任何东西都可以产生,例如
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