練習。小括弧()を使わなくてもある程度までプログラムを書けるんだなぁ。Lispと対比して何かひとこと言う必要ある?
[pyg language=”ruby”]
#! /usr/bin/ruby
tbl=[]
STDIN.readlines.each do |l|
tbl.push l.strip.split
end
lens=[]
tbl.each do |row|
row.each_with_index do |col, i|
begin
if col.length > lens[i] then
lens[i]=col.length
end
rescue NoMethodError, ArgumentError
lens.push col.length
end
end
end
tbl.each do |row|
l=[]
row.each_with_index do |col, i|
l.push col.rjust lens[i]
end
puts l.join ” ”
end
[/pyg]
ある種すごいと思ったのは、配列要素の初期値がnilなので存在しないインデックスを指定するとnilが返ってくるところ。Python時代は例外が発生するからね。ただし、awkなら0と””の両方として使えるのでいきなり++とかしても数えたりつなげたり処理できるが、Rubyはそうはいかず、nilとintの演算で例外が発生する。結局if文を入れるか例外を拾うかのどちらか…
そして、nil > 10 はNoMethodError、10 > nilはArgumentError例外が発生する。違うんだこれが。