如何设计Ruby类以实现传递块时的初始化与关闭操作?

更新于
2026-10-09 20:37:42
1阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计341个文字,预计阅读时间需要2分钟。

如何设计Ruby类以实现传递块时的初始化与关闭操作?

Ruby 中,你可以使用 `open` 方法来创建文件对象,并通过传递一个块来处理文件内容。以下是一个简单的示例,展示如何使用 `open` 方法读取文件内容:

rubyFile.open(myfile.txt, r) do |f| f.each_line do |line| puts line endend

这段代码中,`File.open` 用于打开文件 `myfile.txt` 以进行读取(`r`)。`do...end` 块将作为参数传递给 `open` 方法,允许你操作文件对象。在这个例子中,我们使用了 `each_line` 方法来逐行读取文件内容,并使用 `puts` 输出每一行。这样,当你完成文件操作后,文件会自动关闭。

Ruby有File类,可以使用普通的new()方法初始化,或者使用open()并传递一个块.我怎么写一个表现得像这样的课?

File.open("myfile.txt","r") do |f| ... end 这是将块传递给new / open方法的简单示例

如何设计Ruby类以实现传递块时的初始化与关闭操作?

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

本文共计341个文字,预计阅读时间需要2分钟。

如何设计Ruby类以实现传递块时的初始化与关闭操作?

Ruby 中,你可以使用 `open` 方法来创建文件对象,并通过传递一个块来处理文件内容。以下是一个简单的示例,展示如何使用 `open` 方法读取文件内容:

rubyFile.open(myfile.txt, r) do |f| f.each_line do |line| puts line endend

这段代码中,`File.open` 用于打开文件 `myfile.txt` 以进行读取(`r`)。`do...end` 块将作为参数传递给 `open` 方法,允许你操作文件对象。在这个例子中,我们使用了 `each_line` 方法来逐行读取文件内容,并使用 `puts` 输出每一行。这样,当你完成文件操作后,文件会自动关闭。

Ruby有File类,可以使用普通的new()方法初始化,或者使用open()并传递一个块.我怎么写一个表现得像这样的课?

File.open("myfile.txt","r") do |f| ... end 这是将块传递给new / open方法的简单示例

如何设计Ruby类以实现传递块时的初始化与关闭操作?

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