Ruby

Last-modified: 2011-02-27 (日) 20:56:29

参考リンクなど

http://delicious.com/hyagni/ruby

基本構文

thenのありなしと、doのありなしは揃えるほうがいいらしい。
なしのほうがタイプ数もへるし、あってもそこまでわかりやすいわけでもないので、ないほうがいいかもしれない。

if 式 [then]
  式 ...
[elsif 式 [then]
  式 ... ]
...
[else
  式 ... ]
end
while 式 [do]
   ...
end

Rubyで例外を適切に処理する方法

標準だと止まってしまうが、さすがにそれは不便なので・・

begin
	例外が発生しうる処理
rescue
	例外発生時の対処
end

とすることで、例外への対処を自分で決められる。

発生しうる処理 rescue 対処

でもよい。

File.utimeについて

utime関数でなんらかの形でオープンしているファイルにさわりに行こうとすると例外を出す。
当然の処理だが、writable?とかで判別できない?
ファイルロックされてなくても例外出されるみたいだし(emeditorとか)
それで上みたいな発生後に尻拭い方式になってしまう。

あったらいいな関数

mkdir_p

Unix系のmkdir -pオプションの動作を真似たもの。
指定ディレクトリまで階層を辿って作ってゆく。(Unix系でデバッグしてません)

関数名mkdir_p
引数a_dir作成対象のディレクトリの絶対パス
返値false or truefalseは作成失敗
def mkdir_p(a_dir)	#mkdir like mkdir -p in Unix
	dirs = a_dir.split("/")
	p dirs
	temp_path = ""
	if RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/	#windowsの場合
		temp_path = dirs.shift + "/"
		if !FileTest.exist?(temp_path)	#はじめは"C:"かなんかのはず。これがないと無理
			return false
		end
	end
	while(dirs.size>0) do
		temp_path << dirs.shift + "/";
		p temp_path
		if !FileTest.exist?(temp_path)
			Dir.mkdir(temp_path)
		end
	end
	return true
end

iswin

現在rubyが走っている環境がWindows環境であるかを判定する。
関数にする意味がない。文字数を減らしたり、ソースをみやすくしたりできる程度。
頻繁に呼ぶものではないだろうから関数にしていいとも言えるし、1回呼べばいいから関数にしなくていいとも言える。
お分かりにように、判定にはRubyのシステムの名前を利用していて、wince版はWinではないと判定している。

def iswin()
	if(RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/)
		return true
	else
		return false
	end
end

RubyGemsについて

RubyGemsはhttp://rubyforge.org/frs/?group_id=126&release_id=42796から最新版(Win32ならZip)をダウンロードして、解凍し、中にある"setup.rb"を食わせるだけなのだが、

zlib.dllが必要です

みたいなエラーが出ることがよくある(らしい)。
そういうときは、http://www.zlib.net/からDLLなりソースなりをダウンロードして利用する
このファイルはインストール完了後もパッケージを導入したりするのに利用するようなので、

C:\Program Files\ruby\bin
C:\WINDOWS\system32

など、パスが通っている環境におくといい。

しかし、これだけでは終わらない。
この後Eclipseからデバッグを行おうとしたらまたもやエラーである。

C:/Program Files/ruby/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.5/bin/rdebug-ide:6:in `require': no such file to load -- ruby-debug (LoadError)

ようするに必要なファイルが見つからないということなので、

gem install ruby-debug

でインストールしてみた。なお、この際readline.dllが必要であるから、下記リンクの3からダウンロードする必要がある。

でもまだ終わらない。

C:/Program Files/ruby/lib/ruby/gems/1.9.1/gems/ruby-debug-base-0.10.3/lib/ruby-debug-base.rb:1:in `require': 126: 指定されたモジュールが見つかりません。 - C:/Program Files/ruby/lib/ruby/gems/1.9.1/gems/ruby-debug-base-0.10.3-x86-mswin32/lib/ruby_debug.so (LoadError)

このファイルあるんですが。

Ruby One Click Installerでやってみてもダメだった。

いろいろ調べた結果、現行のruby-debugやruby-debug-ideは1.8向けだということがわかった。(1.9向けもあるようだ:http://rubyforge.org/projects/ruby-debug19/
それだけか・・・・
でもruby-debug19のインストールも成功しない。

まとめ

  • ruby1.9系を使うのなら、それ相応の知識を持って望まねばならない。(私にはない)
  • おそらく最良の方法は、るびまに従ってActiveScriptRuby1.8系を使うこと。
  • Eclipseは起動遅すぎ(何回再起動したことやら)

VisualuRuby

ポイントはやはり1.8系であること?(自分でビルドすればいいんだろうが、libファイルとか揃えるのは面倒だよ)
http://ftp.ruby-lang.org/pub/ruby/binaries/
からswin.soなどのバイナリをおとして突っ込めば大丈夫。

コンソール向けアプリをウィンドウに流しこんで少し便利に。

やっぱりwindowsとコンソールは親和性が低い。
_frm.rbがフォームファイル。main.rbが本体。