ジョギング
- 香椎浜 x 2 周
- 引き続き, 左足太もも前あたりに突っ張るような痛み...嫌な痛みなのでちょっと休むことを検討
日課
- (腕立て x 50 + 腹筋 x 50) x 3
ゴロゴロ
台風が近づいているということで, 終日ゴロゴロ. 朝, 5 時過ぎに目が覚めたので適度に眠気に襲われて寝て起きてを繰り返していた感じ.
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (19) 標準添付ライブラリ (2) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
標準添付ライブラリ (6)
Q2. 次のコードを実行するとどうなるか. 該当するものを全て選べ.
a = 1.0 + 1 a = a + (1 / 2r) a = a + (1 + 2i)
以下, 解答.
以下, irb にて確認.
irb(main):001:0> a = 1.0 + 1 => 2.0 irb(main):002:0> a.class => Float irb(main):003:0> a = a + (1 / 2r) => 2.5 irb(main):004:0> a.class => Float irb(main):005:0> a = a + (1 + 2i) => (3.5+2i) irb(main):006:0> a.class => Complex
以下, 解説より抜粋.
- Float インスタンスと Rational インスタンスの演算は, Float インスタンスとなる
- Float インスタンスと Complex インスタンスの演算は, Complex インスタンスとなる
irb(main):008:0> (1 + 1).class => Fixnum irb(main):009:0> (1 + 1.0).class => Float irb(main):010:0> (1 + 1r).class => Rational irb(main):011:0> (1 + 1i).class => Complex irb(main):012:0> (1.0 + 1r).class => Float irb(main):013:0> (1.0 + 1i).class => Complex irb(main):014:0> (1r + 1i).class => Complex
標準添付ライブラリ (7)
Q16. 以下のコードを実行すると何が表示されるか.
require 'date' d1 = DateTime.new d2 = DateTime.new p (d2 - d1).class
以下, 解答.
- Rational
以下, irb にて確認.
irb(main):001:0> require 'date' => true irb(main):002:0> irb(main):003:0* d1 = DateTime.new => #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)> irb(main):004:0> d2 = DateTime.new => #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)> irb(main):005:0> p (d2 - d1).class Rational => Rational
以下, 解説より抜粋.
- DaTime 同士の減算は Rational インスタンスとなる
ちなみに, Time クラス同士の演算結果は Float となる.
irb(main):007:0> t1 = Time.new => 2018-07-15 16:45:21 +0900 irb(main):008:0> t2 = Time.new => 2018-07-15 16:45:27 +0900 irb(main):009:0> p (t2 - t1).class Float => Float
標準添付ライブラリ (9)
Q21. 以下のコードを実行すると何が表示されるか.
require 'yaml' dir = <<EOY file1: name: app.rb data: ruby file2: - aaaa.rb - ruby EOY p YAML.load(dir)
以下, 解答.
- {"file1" => {"name" => "app.rb", "data" => "ruby"}}
以下, irb にて確認.
irb(main):001:0> require 'yaml' => true irb(main):002:0> dir = <<EOY irb(main):003:0" file1: irb(main):004:0" name: app.rb irb(main):005:0" data: ruby irb(main):006:0" EOY => "file1:\n name: app.rb\n data: ruby\n" irb(main):007:0> p YAML.load(dir) {"file1"=>{"name"=>"app.rb", "data"=>"ruby"}} => {"file1"=>{"name"=>"app.rb", "data"=>"ruby"}}
以下, 解説より抜粋.
- 設問の YAML 形式のデータはハッシュとして読み込まれる
以下, 配列を含む場合.a
irb(main):001:0> require 'yaml' => true irb(main):002:0> dir = <<EOY irb(main):003:0" file1: irb(main):004:0" name: app.rb irb(main):005:0" data: ruby irb(main):006:0" file2: irb(main):007:0" - aaaa.rb irb(main):008:0" - ruby irb(main):009:0" EOY => "file1:\n name: app.rb\n data: ruby\nfile2:\n - aaaa.rb\n - ruby\n" irb(main):010:0> p YAML.load(dir) {"file1"=>{"name"=>"app.rb", "data"=>"ruby"}, "file2"=>["aaaa.rb", "ruby"]} => {"file1"=>{"name"=>"app.rb", "data"=>"ruby"}, "file2"=>["aaaa.rb", "ruby"]}
標準添付ライブラリ (10)
Q24. stringio ライブラリの説明として適切な記述を全てを選べ.
以下, 解答.
- 文字列を IO オブジェクトと同じように扱える
以下, 解説より抜粋.
- stringio ライブラリは, 文字列に IO オブジェクトと同じインターフェースを持たせる StringIO クラスを含む
- StringIO クラスは IO クラスを継承したクラスでは無い
標準添付ライブラリ (11)
Q30. 以下のコードを実行するとどうなるか.
array = [1, 2, 3].freeze array += [4, 5] p array
以下, 解答.
- [1, 2, 3, 4, 5] と表示される
以下, irb にて確認.
irb(main):011:0> array = [1, 2, 3].freeze => [1, 2, 3] irb(main):012:0> array += [4, 5] => [1, 2, 3, 4, 5] irb(main):013:0> p array [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5]
以下, 解説より抜粋.
- freeze はオブジェクトの内容変更を禁止するが, 参照変数自身は変更可能
- 設問では変数 array を破壊的に変更 (concat, uniq! 等)することは出来ないが, 変数 array が別の変数を参照するように変更することは出来る
以下, ドキュメントより引用.
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
凍結されるのはオブジェクトであり、変数ではありません。代入などで変数の指す オブジェクトが変化してしまうことは freeze では防げません。 freeze が防ぐのは、 `破壊的な操作' と呼ばれるもの一般です。
フムフム.