ジョギング
- 香椎浜 x 2 周
- テンポ良く走れたと思う
- 両足の太もも裏に張りを感じる
日課
- お休み
PyFukuoka #4
初めて #pyfukuoka に参加して, LT までしてきた.
最近, moto をギョームで使うことが増えてきたので, 自分の理解の整理がてらに資料にまとめた. 早口とカミカミで聞いている方々に申し訳ない気分で一杯だったけど, 久しぶりに人前で話すことが出来てエキサイティングだった.
ところで, 初めての #pyfukuoka だったけど, 若い方が積極的にネタを持ち寄って「俺にしゃべらせろ」みたいな雰囲気があって, とても刺激を受けたし, 自分の学びの少なさを反省する良い機会になったと思う. また, ブログでを読ませて頂いて, その存在が気になっていたつるべーさんにもお会いしてお話することが出来て良かった. ブログの文面からにじみ出てくるマジメそうな感じそのままで, インフラの仕事をはじめて 2 ヶ月しか経っていないということらしいけど, きっと半年後くらいには, ペパボの諸先輩達の指導の元で凄いエンジニアになっているんだろうなという思いしかなかった.
初 #pyfukuoka の感想: 学生に元気もらったのと、コードのロジックは数式に落とし込めるということ、そして、自分には学術的なアプローチが圧倒的に足りていないなという反省。この後、ハイボールを飲みながら反省会をする。
— Yohei Kawahara(かっぱ) (@inokara) 2018年4月27日
帰りにくさかべさん, つるべーさん, ゆじかわさんの四人で会場近くの小洒落てるんだけど, ちょっと五月蝿い居酒屋で軽く飲みつつ, PyCon Kyushu の話等で盛り上がった.
その後, 香椎に帰ってきてから, 少しお腹が空いたので「もりす」で反省会.
検証結果です。 pic.twitter.com/i0yCCAm1ZL
— Yohei Kawahara(かっぱ) (@inokara) 2018年4月27日
ハイボールをちびちび呑みながら, PyCon Kyushu に CfP 出してみようかなと思いつつ, 過去の PyCon の登壇資料等を見たりしていた. 結論, 俺にはムリだということで, 聞くだけの参加になりそう. また, 6/30 は結婚式記念日なので, 懇親会は不参加になる予定.
今日のるびぃ ~ Ruby技術者認定試験【Gold】模擬問題を解いてみる (re: 6) ~
もう何度か解いているけど, 再び, Ruby技術者認定試験【Gold】模擬問題 を 3 ~ 5 問くらいずつ解いていく.
Q16. Object#freeze
以下のコードの実行結果として正しいものを選択する.
# コード char = { :a => "A" }.freeze char[:a] = "B" p char
以下, irb による実行例.
irb(main):010:0> char = { :a => "A" }.freeze => {:a=>"A"} irb(main):011:0> char[:a] = "B" RuntimeError: can't modify frozen Hash from (irb):11 from /path/to/.rbenv/versions/2.1.10/bin/irb:11:in `<main>'
以下, 解説より抜粋.
- freeze メソッドはオブジェクトを変更不可能にするメソッド
- ハッシュオブジェクトの値を変更しようとしている行で RuntimeError が発生して例外終了する
ドキュメントより抜粋.
irb(main):001:0> a1 = "foo".freeze => "foo" irb(main):002:0> a1 = "bar" => "bar" irb(main):003:0> a2 = "foo".freeze => "foo" irb(main):004:0> a2.replace("bar") RuntimeError: can't modify frozen String from (irb):4:in `replace' from (irb):4 from /path/to/.rbenv/versions/2.1.10/bin/irb:11:in `<main>'
ちなみに, replace
メソッドは self の内容を other の内容で置き換える.
str = 'a' str.replace('b') #=> b
Q17. Proc
以下のコードの実行結果から __(1)__ に当てはまるものを選択する.
# コード sum = Proc.new{|x, y| x + y} puts __(1)__ # 実行結果 3
sum.call(1, 2)
以下, irb による実行例.
irb(main):001:0> sum = Proc.new{|x, y| x + y} => #<Proc:0x005645fe92a0f0@(irb):1> irb(main):002:0> puts sum.call(1, 2) 3 => nil
以下, 解説より抜粋.
- Proc.new ではブロックで指定した手続きを表すオブジェクトである
- 手続きを呼び出す時は Proc オブジェクトに対して call メソッドを呼び出す
- ブロック引数は call メソッドの引数で渡すことが出来る
以下のように Proc.new
を lambda
に書き換えても同様の結果を得ることが出来る.
irb(main):001:0> sum = lambda{|x, y| x + y} => #<Proc:0x0055c4e3706978@(irb):1 (lambda)> irb(main):002:0> puts sum.call(1, 2) 3 => nil
但し, Proc.new
と比較すると, ブロック引数の数に厳密である.
irb(main):001:0> sum = Proc.new{|x, y| x + y} => #<Proc:0x0055f0e05420f0@(irb):1> irb(main):002:0> sum.call(1, 2, 3) => 3 irb(main):003:0> sum = lambda{|x, y| x + y} => #<Proc:0x0055f0e04ff6d8@(irb):3 (lambda)> irb(main):004:0> sum.call(1, 2, 3) ArgumentError: wrong number of arguments (3 for 2) from (irb):3:in `block in irb_binding' from (irb):4:in `call' from (irb):4 from /path/to/.rbenv/versions/2.1.10/bin/irb:11:in `<main>'
Q18. ライブラリ
stringio ライブラリの説明として正しいものを選択する.
1. 文字列をIOオブジェクトのように扱うことができる
以下, irb にて StringIO クラスの確認.
irb(main):002:0> sio = StringIO.new("hoge", 'r+') => #<StringIO:0x0055c8787eaef0> irb(main):003:0> p sio.read "hoge" => "hoge" irb(main):004:0> sio.rewind => 0 irb(main):005:0> p sio.read(1) "h" => "h" irb(main):006:0> sio.write("OGE") => 3 irb(main):007:0> sio.rewind => 0 irb(main):008:0> p sio.read "hOGE" => "hOGE"
フムフム.