gpt4 book ai didi

ruby - yield self 和 yield 的区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:21 36 4
gpt4 key购买 nike

谁能帮我理解“yield self”和“yield”的区别?

class YieldFirstLast
attr_accessor :first, :last

def initialize(first = nil, last = nil)
@first = first
@last = last
yield self if block_given?
end

def hello
puts "#{@first} #{@last} says hello!"
end
end

最佳答案

yield self 的情况下,self 是传递给 block 的参数。使用简单的 yield,不传递任何参数。 self 在这里并不特殊,任何东西都可以产生,例如

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

关于ruby - yield self 和 yield 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12032291/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com