#ioクラスメソッド:実行結果を
※ファイルdataの内容はabcdefg
File.open("data") do |io|
while not io.eof?
print io.read(1)
io.seek(0,IO::SEEK_SET)
end
end
#答え
aが表示され続ける
CPUが6割、メモリ6GB食われてたので、ちょっと焦りました。
##EOFとは
End of Fileの略
##ioクラスメソッド、SEEK_SET
参考:instance method IO#seek
ファイルポインタを whence の位置から offset だけ移動させます。 offset 位置への移動が成功すれば 0 を返します
ファイル上の文字にポインタなる住所のようで住所じゃないものがある。らしい
今回は、io.seek(0,IO::SEEK_SET)でオフセットを0に指定しているため、
文字の読み込みが最初のaからすすまない(ずっとaが読み込まれる)らしい
#strgtime:実行結果にあう、選択肢を選べ
#問題
t = Time.gm(1970,1,1)
puts t.strftime("#ここに代入する式を選択")
#実行結果
1970/01/01
#選択肢
1, %y/%m/%d ,2, %Y/%M/%d
3, %y/%M/%d ,4, %Y/%m/%d
#答え
4
##strgtimeメソッド
instance method Time#strftime
少しずつ覚えるしかないようだ。
###strgtimeで代表的なもの
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
4桁の西暦 | 2桁の西暦 | 月 | 日 | 時刻 | 分 | 秒 |
%Y | %y | %m | %d | %H | %M | %S |
#正規表現:
Newまたはnewのみで構成される行にマッチする正規表現を選びなさい。(二つ選択
#選択肢
^[Nn]ew$
^N|new$
^[Nn][e][w]$
^New|new$
^[New]|[new]$
#答え 1と3
##正規表現
正規表現もさっぱりなので、授業の無い、土日月に理解したい
#Rubyの予約語:予約語を選べ
#問題
while rand
goto class const
#答え whileとclass
##予約語
既にruby側で定義されている言葉。自分で使おうとしても使えない。
#to_s :実行結果をかけ
#問題
x = 0
[1,2,3].each do |x|
print x.to_s + " "
end
puts x
#解答 1 2 3 0
(1,2,3は表示上は数字型だか、実は文字型)
##to_s :整数型データを文字型に変換する
##検証コード
x = 0
[1,2,3].each do |x|
print x.to_s + " "
print x.to_s.class
end
puts x
#実行結果
irb(main):001:0> x = 0
[=> 0
1irb(main):002:0> [1,2,3].each do |x|
irb(main):003:1* print x.to_s + " "
irb(main):004:1> print x.to_s.class
irb(main):005:1> o_s.class
irb(main):005:1> end
irb(main):005:1> end1 String2 String3 String=> [1, 2, 3]
irb(main):006:0> puts x
0
=> nil
#不思議
#Rubyの偽の値
#問題
nil 0 ""
false 0.0 NULL
#解答 nil と false
これも記憶
#例外処理: 適切な選択肢を
#問題
y = false
y ##AAA## (raise "failed")
puts("succeeded!")
#選択肢
1, | ,2, || ,3, & ,4, &&
#答え &&
&&演算子
&&演算子は左辺の評価結果がfalseの場合は、右辺を評価せずに次の処理に進む
|| 演算子は、左辺の評価結果がtrue の場合は、右辺を評価せずに次の処理に進む
|演算子と&演算子は、左辺の評価結果に関係なく、右辺を評価する
raise 例外
raiseは例外を投げるので、それ以降の処理を飛ばす
それを捕捉したい場合は、begin rescue endを使う
今回の場合、raiseが実行されるとputs("succeeded!")が実行されないのを、考慮
#範囲オブジェクト:1から10まで表示sるコードを選べ
(1.10).each do |i| puts i end
(1..10).each do |i| puts i end
(1...10).each do |i| puts i end
(1....10).each do |i| puts i end
#答え 2
##範囲オブジェクト
定義されているのは、点2つと点3つ。
2つは2から10以下 、3つは2から10未満
#gsub! :実行するとどうなる
#問題
HOGE = "hoge"
HOGE.gsub!("hoge", "piyo")
print HOGE
#答え 警告は発生せず、「piyo」が表示される。
##gsub! :破壊的メソッド
アルファベット大文字で始まる識別子は定数は定数なので、新たに代入を行う際には警告が発生します。
しかし、gsub!は破壊的メソッドを呼び出しているだけなので、警告は発生せず、文字列は「piyo」に書き換わります。
#例外:正しい記述を選べ
#問題
1, beginによって例外を捕捉する際は、例外の可能性がある処理をbeginからrescueの間に記述する。
2, ひとつの処理に対して複数のrescueは、指定できない。
3, 例外オブジェクトのメソッドstacktraceにより、例外スタックを取得できる。
4, ensureは、必ず記述する必要がある
#答えは1
##stacktraceとは
参考:
エラーが発生したときに表示される内容で、そのエラーが発生するまでの過程(どんな処理がどの順番で呼び出されたかの流れ)を、ざっくりと表示したもの
#エラーコード
以下のコードの##AAA##にZeroDivisionError が発生した時の処理を記述したい。適切なコードを選択
#問題
begin
puts 10 / 0 #ZeroDivisionError
##AAA##
print "ZeroDivisionException:", ex.message
end
#選択肢
1, rescue ZeroDivisionError = ex
2, rescue ZeroDivisionError ex
3, rescue ZeroDivisionError -> ex
4, rescue ZeroDivisionError => ex
#答え 3
##試してみて
begin
puts "hello"
puts 10 / 0
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
rescue ZeroDivisionError => ex
puts "good bye"
print "ZeroDivisionException:", ex.message
end
begin
puts "hello"
puts 10 / 0
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
puts "good afternoon"
rescue Exception => ex
puts "good bye1111111"
print "message:", ex.message
rescue ZeroDivisionError => ex
puts "good bye2222222"
print "ZeroDivisionException:", ex.message
end
#?A : コード実行どうなる
#問題
p ?A
#答え "A"
##解説コード
#コード1
p "A".ord
#出力
65
#コード2
p 65.chr
#出力
"A"
##65とは
unicode上のAの番号的な
参考:Ruby にて文字と Unicode コードポイントの相互変換を行う
今回も、なるほど!よくわからん、が多い