このエントリーをはてなブックマークに追加
スポンサーリンク

2016年2月7日 インクルードパスの追加

Perlでインクルードパスを追加するために、@INCという配列にパスを追加していた。それと同じことをRubyでやりたいのだが、なにせRubyの命令をなに1つ知らないもんだから、都度検索しないといけないという、非常に非効率的な、カタツムリ的な速度で作業が進捗しているわけです。

昨日わかった事は、Perlで@INCに相当するものは、Rubyでは$:であるという事。したがって、この$:という変数にカレントと、カレントの1つ手前の /rubyincというディレクトリをインクルードパスに追加すれば良い。

作ってみた。

-----------------------------------------------------
current=Dir::pwd
current_array = current.split("/")
max=current_array.count-2
inc_path=""
for cnt in 0..max
inc_path+=current_array[cnt]+"/"
end
inc_path+="rubyinc"
$:.unshift(current, inc_path)
-----------------------------------------------------

Rubyで文字列を操作する場合は、

変数.メゾット(引数)

というふうに、VBとかJavaScriptっぽく書くわけだな。PerlをVBっぽくした言語というべきだろうか。しかし、こういうのは自分はちょっと苦手ですな。といいますか、そもそもオブジェクト指向型の言語というのがイマイチ得意じゃなかったりします。

さっそく require "furiwake.inc"としてみると、

./index.rb:21:in `require': no such file to load -- furiwake.inc (LoadError)
from ./index.rb:21

そんなファイルはないとおっしゃる。そんなバカな。ためしに p $:とやってみると、ちゃんと、rubyincが追加されているではないか。これは一体どういう事やねん。

で、他の人のサンプルを見ると、拡張子がみんな.rbになっているわけですよ。

「ま、まさか・・・拡張子が.rbじゃないとダメなのか??」

拡張子を変えてみる。

・・・・できた。なんだそりゃあああ。

じゃあ、requireをやめてincludeにしてみる。すると、

./index.rb:21:in `include': wrong argument type String (expected Module) (TypeError)
from ./index.rb:21

引数が違う??じゃあどうするのさ。

調べたところによると、includeは単なる文字列操作。つまり、PHPのincludeとは全然違うって事で。

じゃあ今度はloadと書いてみる。

・・・できた。つまり、requireはあくまでrubyのライブラリ(.rb)を読むためのものであって、拡張子.incを読むものではないっつー事ですな。なので、PHPのincludeのかわりに使いたいのであれば、loadを使わないといけないって事で。

===============================================
▽ここを参考にしました。ありがとうございました。
http://yiaowang.web.fc2.com/programing/ruby_base/syntax_loop.html


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

スポンサーリンク