Uraraの作業ログ(β)

※がついている機能はパスワード入力が必要 

.

5月30日作業ログ

タグ: Ruby

Article: Silverはリテラルまで
リテラル:ソース中に直接記述出来る文字の事(1とか”Hello"とか)

読むだけ、チェックは後で
p83辺り

正規表現のオプション
i:大文字、小文字の区別しない
o:一度だけ式展開を行う
x:パターン中の空白と改行を無視する
m: .が改行にもマッチする(複数行モード)

OSのコマンドを叩く
バッククォートで囲まれるとOSのコマンドを叩く事になる
puts `date`
とかやると現在の時刻を表示する

%x(date)でも一緒、中で式展開、バックスラッシュ記法も可能


ブロックとProc (他の言語で言うクロージャー)
def hoge x
x + yield
end

x = 2

p hoge(1){x += 2 }


ブロックは| |で引数を受けられる

def hoge a, b
a + yield(b, 3)
end

p hoge(1, 2){|x , y| x+y }

#=>6


block_given?の使い方
コードから感じ取れ!
def hoge
return 1 if block_given?
2
end

x = 2

p hoge(){} #=> 1
p hoge #=> 2

ブロックが渡されたかどうかで処理を分ける事が出来る

Proc ブロックをオブジェクトとして使う方法
分かりづら過ぎる、ちょいパス

ProcとLambda
Procは渡されたブロックの中でreturnすると、一個上のメソッドも脱出する(トップレベルでやるとエラーになる)
lambdaはしない



・引数の数が違う時
p1 = Proc.new{|x,y| x}
p p1.call(1) #=> 1

p1 = Proc.new{|x,y| y}
p p1.call(1) #=> nil


p1 = lambda{|x,y| x}
p p1.call(1) #=> ArgmentError


スレッド
コードから感じ取れ!

t = Thread.new do
p "start"
sleep 2
p "end"
end
p "waiting..."
t.join

脱出構文
next:continueみたいなもん
redo: また同じループ繰り返す

(1..100).each do |i|
if i%3 == 0
then p "hoge"
next
end
if i.to_s =~ /3/
then p "hoge"
next
end
p i
end

例外発生させる
raise ArgmentError, "hogehoge"

例外引数を省略するとRuntimeErrorになる


begin
p 1
1/0
rescue
p 0
else
p 2
ensure
p 3
end
#=>1 0 3になる
rescureより後でError出てもrescureしてくれない

$!で最後に発生したエラーを参照出来る
raiseを引数無しで呼ぶと最後に発生した例外をもう一回発生させる

複数のresque書く時の注意
begin
1/0
rescue
p 1
rescue ZeroDivisionError
p 2 #ここは実行されない
end

マッチする範囲が広くなるようにresqueを並べる必要がある


一行でカレント以下のファイル全て取って配列にぶち込む
Dir.glob("**/*.rb")

俺の日記を取ってこれるかテストすればいいんじゃね?
はてなとかposterousから吸い取ってUraraにぶち込めるようなスクリプト書けば良いよね

有難いコメント一覧

コメントを書いてあげる


御芳名
コメント:
Edit | Back