• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【ruby】特異クラスを使って,File.statをカスタムしたい)

【ruby】特異クラスを使って、File.statをカスタムしたい

このQ&Aのポイント
  • 特異クラスを使用して、File.statにnameメソッドを追加したいです。実行結果は期待通りになりません。
  • 実行結果はnilが出力され、期待した結果が得られませんでした。クラスメソッドstatの中に定義されているFile::Stat.new(file)を戻り値として使用しています。
  • class File::Statのinitializeでは、@file = fileとなっているため、上記のようにコードを書きましたが、うまくいきませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

file.rbとかstat.rbとか、何のことかわからなかったですが、どうやらおそらく、rubygemsのwin32-file-statの話ですね。 require "win32/file" class File::Stat def name @file end end でいいと思います。やってみましたが、ファイル名はUTF-16で格納されていますね。

kingfruits
質問者

お礼

notnotさん、ご回答ありがとうございました。 >file.rbとかstat.rbとか、何のことかわからなかったですが、どうやらおそらく、rubygemsのwin32-file-statの話ですね。 『stat』をrubyのディレクトリ配下で検索して出てきたファイルでして、 今一度確認しましたら、rubygemsのwin32-file-statでした。 File.statは、require "win32/file"すれば、stat.rbのFile::Statになるって事なんですよね。 また、質問になっちゃうのですが、require "win32/file"してない状態のFile.stat(つまりは組み込みのFile.stat)を改造するのって、どうしたら良いのですか? ご存知でしたら教えてください。お願いいたします。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>つまりは組み込みのFile.stat)を改造するのって、どうしたら良いのですか?  あまり綺麗には行きませんね。とりあえず下記で出来ます。 class File::Stat  attr_accessor :name end class << File  alias orig_stat stat  def stat(f)   w=orig_stat(f)   w.name=f   w  end end

kingfruits
質問者

お礼

notnotさん、ご回答ありがとうございました。 >あまり綺麗には行きませんね たしかに強引な感じはしますが、 attr_accessorで出来ちゃうんですね!! すばらしい!! ありがとうございました。