gpt4 book ai didi

ruby - 如何创建一个在传递 block 时初始化和关闭的 Ruby 类?

转载 作者:数据小太阳 更新时间:2023-10-29 07:48:04 26 4
gpt4 key购买 nike

Ruby 有 File 类,可以使用普通的 new() 方法或使用 open() 并传递一个 block 来初始化。我将如何编写具有这种行为的类?

File.open("myfile.txt","r") do |f|
...
end

最佳答案

这是一个将 block 传递给 new/open 方法的简单示例

class Foo
def initialize(args, &block)
if block_given?
p block.call(args) # or do_something
else
#do_something else
end

end

def self.open(args, &block)
if block_given?
a = new(args, &block) # or do_something
else
#do_something else
end
ensure
a.close
end

def close
puts "closing"
end


end

Foo.new("foo") { |x| "This is #{x} in new" }
# >> "This is foo in new"
Foo.open("foo") { |x| "This is #{x} in open" }
# >> "This is foo in open"
# >> closing

关于ruby - 如何创建一个在传递 block 时初始化和关闭的 Ruby 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357269/

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