ruby学習メモ
- while
file = File.open("Ex084.txt") while line = file.gets print if line =~ /start/ .. line=~ /end/ end
Ex084.txt の内容
1 start 3 4 end 6
出力結果
start 3 4 end
$. で読み込んだ行を表示することが出来る puts $. print "行数:#{$.}"
- begin/end を使用する際の注意
# 実行されない print "Hello\n" while false # 1回実行される begin print "Goodby\n" end while false
実行結果
Goodby
begin/end の場合は必ず1回実行される。
イテレータによる繰り返し
puts "test1" 0.upto(9) do |x| print x, " " end print "\n\n" puts "test2" 0.step(16, 5) {|x| print x, " "} print "\n\n" puts "test3" [ 1, 1, 2, 3, 4 ].each {|x| print x, " "}
結果
test1 0 1 2 3 4 5 6 7 8 9 test2 0 5 10 15 test3 1 1 2 3 4
- for in
print "\n\n" for v in [1,2,3,4,5] print v, " " end
1 2 3 4 5
- クラスに each メソッドを宣言すると、for in で使用することが出来る
class EachableClass def each yield "value1" yield "value2" yield "value3" end end for v in EachableClass.new print v, " " end
value1 value2 value3
break redo next
break | もっとも内側のループを抜ける。 |
next | ループの終わりにジャンプし、次の繰り返しに入る。continue 見たいな |
redo | 次の要素に移動せず、もう一度ブロックの処理を行う。 |
retry | ループを最初から起動しなおす。 |
break に引数を指定することが出来る
result = for v in [1,2,3,4,5] break(v * 10) if v == 3 end print result => 30
引数が省略されている場合は nil を引き渡したものとします。
変数のスコープ・ループ・ブロック
while | スコープは生成されない |
until | スコープは作成されない |
for in | スコープは作成されない。for xxx in の xxx もスコープが作成されないので注意 |
eachなどのブロック | ブロック内で定義された値はローカルスコープとなる。ただしブロック外で既に定義されている変数についてはその変数が使用されるため、スコープも継承される |