人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Ruby】トップレベル?Fileクラスを指定するにはどうすれば良いのでしょうか?

require 'rubygems'
require 'mechanize'
class MyMech < Mechanize
DIR = File.dirname(__FILE__)
end
#=> NoMethodError: undefined method `dirname' for Mechanize::File:Class

Mechanize::File.dirname() ではなく
こちら
http://www.ruby-lang.org/ja/man/html/File.html
のクラスの File.dirname() を使うにはどうすれば良いのでしょうか?






●質問者: nannde
●カテゴリ:コンピュータ
✍キーワード:Class Dir Eクラス require Ruby
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● koriki-kozou
●10ポイント

http://www.ruby-lang.org/ja/man/html/File.html

>p File.dirname("dir/file.ext") # => "dir"

>p File.dirname("file.ext") # => "."


super は希望通りに動かない

mechanize でオーバーライドする前に alias しておくという手は試してない

warnig: toplevel constant File referenced by IP:File は出るけど一応使えそう

p IO::File.dirname("dir/file.ext")

p IO::File.dirname("file.ext")

◎質問者からの返答

ご回答ありがとうございます!!

::File

だったようです。

最速のご回答ありがとうございます m(_ _)m


2 ● nuna
●100ポイント ベストアンサー

トップレベルの定数を参照するには :: を前につけてください。

class MyMech < Mechanize

DIR = ::File.dirname(__FILE__)

end

です。

あるいは、Mechanize の中を触る必要がなければ、

単にMyMechのインスタンス変数としてWWW::Mechanizeを持ったり委譲したりでもいいかと思います。

◎質問者からの返答

ご回答ありがとうございます!!

どんぴしゃ解決でございます m(_ _)m

優れたアドバイスもありがとうございます!!

Mechanize の中を触る必要はないのですが、

カンタンに委譲する方法を知らないので継承しようとしてます(--;;

class MyMech < Mechanize

def get(o, p, nanika)

@mech.get(o, p, nanika)

end

def post(...

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ