【至急回答希望】

ruby で kconv を require できなくて困っています。
理由を教えてください。
ほかに調査するために必要な実行コマンドがありましたら、
追記致しますのでお教えください。

@ubuntu:$ uname -a
Linux ubuntu 3.0.0-12-server #20-Ubuntu SMP Fri Oct 7 16:36:30 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
@ubuntu:$ which ruby
/usr/bin/ruby
@ubuntu:$ which irb
/usr/bin/irb
@ubuntu:$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

@ubuntu:$ ls -l /usr/lib/ruby/1.8 | grep kconv
-rw-r--r-- 1 root root 8319 2011-07-27 20:21 kconv.rb
@ubuntu:$ irb
irb(main):001:0> $:.each do |path|
irb(main):002:1* puts(path)
irb(main):003:1> end
/usr/local/lib/site_ruby/1.8
/usr/local/lib/site_ruby/1.8/x86_64-linux
/usr/local/lib/site_ruby
/usr/lib/ruby/vendor_ruby/1.8
/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux
/usr/lib/ruby/vendor_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/x86_64-linux
.
=> ["/usr/local/lib/site_ruby/1.8",
"/usr/local/lib/site_ruby/1.8/x86_64-linux",
"/usr/local/lib/site_ruby",
"/usr/lib/ruby/vendor_ruby/1.8",
"/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux",
"/usr/lib/ruby/vendor_ruby",
"/usr/lib/ruby/1.8",
"/usr/lib/ruby/1.8/x86_64-linux", "."]
irb(main):004:0>
irb(main):005:0*
irb(main):006:0* require 'kconv'
=> false
irb(main):007:0>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/13 17:42:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153

ポイント475pt

http://doc.ruby-lang.org/ja/1.9.2/doc/index.html
「オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル」の、
「組み込みライブラリ」の Builtin libraries から、Module Kernel の require の項を参照ください。

http://doc.ruby-lang.org/ja/1.9.2/class/Kernel.html

ライブラリのロードに成功した時には true を返し、ロードした feature の名前を(拡張子も含めて) 変数 $" に追加します。ただし、feature の名前が既に $" に含まれていた場合はロードせずに false を返します。


古いマニュアルだと、もっとズバリと書かれてたんですけどね。
http://www.ruby-lang.org/ja/old-man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#require

実際にライブラリをロードした時には true、既にロードされている時には false を返します。ロードに失敗した場合は、例外 LoadError が発生します。


load の項も、合わせて確認しておくと、良いと思います。

id:a-kuma3

コメントで引用したマニュアルの記述は、手元にある古いバージョンのものだったので、
今のバージョンのマニュアルの記述も含めて、回答を編集しました。

2011/11/13 16:49:35
id:goto_hirosi

ご回答ありがとうございました。助かりました。

2011/11/13 17:44:37

その他の回答1件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント25pt

require ’zlib’ で false になる - 36丁目 オレオダウンローダー
これが参考になりませんか。

kconvは標準添付だし関係ないか…
require 'kconv'でfalseはコメント蘭の通り、$"でkconv.rbがあってもfalseになりますね。
kconvの処理がうまくいかない(?)ならファイルの文字コードがおかしいとか。


Rubyist Magazine - 標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv

id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

ポイント475pt

http://doc.ruby-lang.org/ja/1.9.2/doc/index.html
「オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル」の、
「組み込みライブラリ」の Builtin libraries から、Module Kernel の require の項を参照ください。

http://doc.ruby-lang.org/ja/1.9.2/class/Kernel.html

ライブラリのロードに成功した時には true を返し、ロードした feature の名前を(拡張子も含めて) 変数 $" に追加します。ただし、feature の名前が既に $" に含まれていた場合はロードせずに false を返します。


古いマニュアルだと、もっとズバリと書かれてたんですけどね。
http://www.ruby-lang.org/ja/old-man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#require

実際にライブラリをロードした時には true、既にロードされている時には false を返します。ロードに失敗した場合は、例外 LoadError が発生します。


load の項も、合わせて確認しておくと、良いと思います。

id:a-kuma3

コメントで引用したマニュアルの記述は、手元にある古いバージョンのものだったので、
今のバージョンのマニュアルの記述も含めて、回答を編集しました。

2011/11/13 16:49:35
id:goto_hirosi

ご回答ありがとうございました。助かりました。

2011/11/13 17:44:37
  • id:a-kuma3
    >ruby で kconv を require できなくて困っています。
    というのは、具体的に、どう見えてくるのですか?

    irb で、require "kconv.rb" とやって、true が返ってこない?
  • id:goto_hirosi
    > irb で、require "kconv.rb" とやって、true が返ってこない?

    はい。
    最初の質問に記載している通り、falseが返ってくる状態です。

    >>irb(main):005:0*
    >>irb(main):006:0* require 'kconv'
    >>=> false
  • id:a-kuma3
    あ、ごめんなさい。
    質問に書いてありますね ><

    require "kconv"
    ではなく、
    require "kconv.rb"
    と書いても、false が返ってきますか?
  • id:a-kuma3
    Ruby のマニュアルで、require のところには、
    >requireは実際にロードした時には true,既にロードされている時にはfalseを返します.
    >またロードしたfeatureの名前を(拡張子も含めて),変数 $"に追加します.
    とあります。

    irb 起動直後の $" を確認してみてください。
  • id:goto_hirosi


    >Ruby のマニュアルで、require のところには、

    ありがとうございます。
    そうなのですね。既にロードされていたのですね。
    もしよろしければ、本件が記載されていた RubyのマニュアルのURLを教えて頂けると助かります。

    >irb 起動直後の $" を確認してみてください。

    おっしゃる通りに、すでにロードされているようでした。
    以下、irb実行結果です。

    $ irb
    irb(main):001:0> $".each do |lib|
    irb(main):002:1* puts lib
    irb(main):003:1> end
    enumerator.so
    e2mmap.rb
    irb/init.rb
    irb/workspace.rb
    irb/context.rb
    irb/extend-command.rb
    irb/output-method.rb
    irb/notifier.rb
    irb/slex.rb
    irb/ruby-token.rb
    irb/ruby-lex.rb
    readline.so
    irb/input-method.rb
    irb/locale.rb
    irb.rb
    nkf.so
    kconv.rb
    => ["enumerator.so", "e2mmap.rb", "irb/init.rb", "irb/workspace.rb", "irb/context.rb", "irb/extend-command.rb", "irb/output-method.rb", "irb/notifier.rb", "irb/slex.rb", "irb/ruby-token.rb", "irb/ruby-lex.rb", "readline.so", "irb/input-method.rb", "irb/locale.rb", "irb.rb", "nkf.so", "kconv.rb"]
  • id:a-kuma3
    回答しておきましたー。

    1.8 になってから、かなりドキュメントも書き込まれてるので、
    Ruby でも、まず、マニュアルに当たってみる、というのが良いと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません