0

どのように実装されているのか調べてみましたが、 https://github.com/ruby/rubyFile.open()から取得したコードをググってみたら見つかりませんでした

4

2 に答える 2

1

Fileクラスは Ruby モジュールではなく C モジュールです。そのため、Ruby コードは見つかりません。

file.cルートフォルダーにあるようです。モジュールには、IO別の C モジュールでありio.c、同じ場所にあるモジュールが含まれます。名前が で始まる関数を探しrb_file_openます。

于 2012-12-17T23:52:14.880 に答える
0

はなくFile::open、 から継承されていIOます。したがって、を探す必要がありますIO::open

一般に、これには Rubinius のソース コードを使用することをお勧めします。YARV のソース コードよりもはるかによく整理され、文書化されています。最も重要なことは、ほとんどが Ruby で記述されているのに対し、YARV では言語全体、コア ライブラリ全体、および標準ライブラリの重要な部分が C で記述されていることです。

そうは言っても、の実装IO::openは完全にまったく退屈です。それは明らかなことをするだけです:

def self.open(*args)
  io = new(*args)

  return io unless block_given?

  begin
    yield io
  ensure
    begin
      io.close unless io.closed?
    rescue StandardError
      # nothing, just swallow them.
    end
  end
end
于 2012-12-18T05:16:31.937 に答える