たのしいRuby 第18章 Ruby落ち穂ひろい
いよいよ第4部「Rubyを使いこなそう」に入ります。今までは定義されたクラスを使う側。ここからはクラスを作る側。同じようで全然違う。今まで@が全然出てきません出したが、ここからバリバリ@を使っていくことになると思います。一気にレベルがが上がるので、ここからは章を分割してお届けするかもしれません(未定
では、18章に入っていきます。
コマンドラインオプション
エディタ側と上手く連系出来るようになる必要がありそうです。僕はmake好きなので、
コマンドラインオプションは深いっす。言語編を熟読しないと・・・。
ワンライナ
ruby一行野郎も深そうです。一行野郎好きなのでこのあたり楽しいっす。
% ruby -e '1000.times {printf "%04d\n",rand(10000)}' 8881 5951 0978 9698 7307
ソートのテストで使うと便利かも。イテレーターの威力は絶大ですねぇ。
外部実行
irbでちょっとした作業をするときは便利に使えそうです。
irb(main):001:0> print `ls` args.rb balanced.rb ...(略
cdは使えませんでした・・・。シェル組込みなので当然といえば当然か・・・。
組込み変数,環境変数
かなり重要度なところ。ひとつづつ確かめておくと後で使えそうです。
irb(main):023:0> pp ENV {"SSH_AGENT_PID"=>"3185", "HOSTNAME"=>"localhost.localdomain", "GPG_AGENT_INFO"=>"/tmp/gpg-cR77D7/S.gpg-agent:3237:1", "SHELL"=>"/bin/zsh", "TERM"=>"xterm",
DATA
テストプログラムを書いているときは絶大な威力を発揮しそうです。
__END__以降の文字列がDATAに入って処理されます。
DATA.each do |line| print line end __END__ テスト中の文字列 ホントに動いているのか!?
いちいちコマンドラインオプションを書かなくて済みますねぇ〜。活用しよう。
...(続く
だけでドンドン補完できてしまう。macのTextMateのエミュレーター - snippetsEmu.vim
RoRの15分ムービーで使われているTextMateのsnippetsもどきなvimプラグインsnippetsEmuより。
Vimに
snippetsEmu - An attempt to emulate TextMate's snippet expansion : vim onlineからダウンロードして、以下を実行〜
% vim -c 'so %' snippetsemu1_1.vba :q
インストールはこれだけでいい。何故か/.vim/after/以下にインストールされる。
使い方は至ってシンプル。
cの場合は、
Inc<tab>stdio.h<tab>main<tab>printf<tab>Hello, Snippet!!<tab><tab>
すると・・・。
#include <stdio.h> int main (int argc, char const* argv[]) { printf("Hello, Sinippet!!\n"); return 0; }
ここまで書き上がって上がってしまう。文字を書いて
snippetの中身は、単なるマクロファイルなので、
:Snippet trigger_name The cursor will be placed here: <{}> Trailing text
こんな感じでガリガリ登録していけば、trigger_name
ちと、snippetsEmu.vimを追いかけます。詳しいのはまた今度ということで〜。
インデント部分にバグがあるっぽい・・・。=必修。
たのしいRuby 第17章 時間関連クラス
Ruby漬けのGWも残り僅かで〜す。「この本の半分くらい終わればいいかなぁ」と、思っていたのですが、学習効率の高いirbのおかげで、案外順調に進んでます。
第三部最後の章。時間関連クラスに入ります。ワンライナ的な所なのでirbでいきたいと思います。
謎。
ふふ。早速謎の構文。
p Time.mktime(2006,5,15,05,13,11) #=> Mon May 15 05:13:11 +0900 2006
よく見ると"05"となってます。確認します。
p 012345 #=> 5349
サンプルは8進数で書いてありますね・・・危険です。罠です。
では、"09"にするとどうなるか。
p Time.mktime(2006,5,15,09,13,11) #=> SyntaxError: compile error
SyntaxErrorです。案外やってしまいそうなので、注意が必要かと思います。
8進数ついでに、もう一個確認しておきましょう。
p "012345".to_i #=> 12345
文字からの変換は10進数になりますね。Linuxな世界では8進数を多用するので、罠に注意です。パーミッションの755も8進数です。
Time,DateTime,Date
Rubyでは3つの時間の表し方があるようです。
Time.now #=> Sat May 05 17:21:28 +0900 2007 DateTime.now #=> #<DateTime: 212045113299867697/86400000000,3/8,2299161> Date.today #=> #<Date: 4908451/2,0,2299161>
- Time.now + 1は1秒足す
- DateTime.now + 1は1日足す
- Date.today + 1は1日足す
内部実装が違うので注意が必要です。
練習問題
最後の練習問題はムズいっす。
- 逆で解いてしまった・・・反省。String#scanの使い方が非常に参考になります。
- ls_tを作れという問題。全然わかんなかった。Hashを使って上手く解いてます。
- 最後は超難問。カレンダーを作る。何処かで作った記憶があるけど、こんなにスマートには解いてなかった。
練習問題をきっちりやると力が付くはずですが、サボっちゃいました(汗