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などのブロック ブロック内で定義された値はローカルスコープとなる。ただしブロック外で既に定義されている変数についてはその変数が使用されるため、スコープも継承される