Ruby Silver 試験後にちょっと怪しかった問題をirbでの確認してみます。
ord
文字列の最初の文字のコードポイントを返却。
コードポイントとは、1文字を表す整数のコードです。
> "A".ord => 65 > "AB".ord => 65
文字列[]
この書き方ないだろうと思ったら、あった。。
> "AB"[0] => "A" > "AB"[0..1] => "AB"
2文字のupto
普段からのruby使いの人は普通にわかるんだろうな。ちょっと考えた問題。
> "io".upto("ir"){|n| puts n} io ip iq ir => "io"
EOFError
readlineはデータを最後まで読み込んだ後に例外発生する。
def read begin line = STDIN.readline rescue EOFError end end
ensureとexit
exitしてもensure内の処理は実行される。 ensureは強力なり。
exitの後の値はrubyの終了ステータス(0:正常、1:異常)
begin exit 0 rescue => e ensure p "終了処理" end
参考Ruby - exit時にensureが実行されてしまう - Qiita
配列.push()
配列のお尻に引数に指定(複数もカンマ区切りで可能)した値を追加する
> [1,2,3].push(1,2,3) => [1, 2, 3, 1, 2, 3] > [1,2,3].push([1,2,3]) => [1, 2, 3, [1, 2, 3]]
concat
String,Array両方あり
> s = "Hello" => "Hello" > s.concat(" World!") => "Hello World!" > p s "Hello World!" > p [1,2,3].concat([1,2,3]) [1, 2, 3, 1, 2, 3]
Split デフォルト区切り
引数patternのデフォルト値は組み込み変数$;で、初期値はnilのため、
引数省略時は空白文字分割となる。
> "1 2 3".split() => ["1", "2", "3"] > "1,2,3".split() => ["1,2,3"] > "1,2,3".split(//) => ["1", ",", "2", ",", "3"] > "1 2 3".split(//) => ["1", " ", "2", " ", "3"]
時間の加算
+演算子で秒単位で加算可能
> t = Time.now => 2015-08-19 20:41:35 +0900 > t += 60 => 2015-08-19 20:42:35 +0900 > t += 1 => 2015-08-19 20:42:36 +0900
each_index
> animals = ["dog", "cat", "caw"] => ["dog", "cat", "caw"] > animals.each_index {|i| puts "#{i}. #{animals[i]}"} 0. dog 1. cat 2. caw => ["dog", "cat", "caw"]
配列 シンボルの新しい書式
シンボルと文字列のKeyはちゃんと区別される。
* hash = {yume: "夢", kibou: "希望"} => {:yume=>"夢", :kibou=>"希望"} > hash[:yume] => "夢" > hash["yume"] => nil