- ジョギング
- 日課
- 8 時間耐久カラオケ
- 今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (18) 標準添付ライブラリ (1) ~
ジョギング
- 香椎浜 x 2 周
- なんか, 両足が筋肉痛気味だったのでゆっくりと
- 左足太もも前あたりに突っ張るような痛み
日課
- (腕立て x 50 + 腹筋 x 50) x 3
8 時間耐久カラオケ
奥さんと 8 時間耐久カラオケを実施した. ほぼ 8 時間歌いっぱなしで喉がへんな感じになってしまった. 奥さんは平気で歌っていたので, 鍛え方が違うなーと思った次第. 総じて楽しかった. 猛暑でつらい休日の過ごし方はコレでで決まりかもしれない.
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (18) 標準添付ライブラリ (1) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
標準添付ライブラリ (1) 基礎力確認問題より
Q26. 以下のコードを実行したらどうなるか. テストされるクラスファイル foo.rb は存在していると仮定.
require 'test/unit' require 'foo' class TC_Foo < Test::Unit::TestCase def foo_test # テストコード... end end
以下, 解答.
- foo_test が規則に則っていないので, テストは実行されない
以下, 解説より抜粋.
- Test::Unit のテストメソッド名は
test_
で始める
以下, 正しいコード.
require 'test/unit' require 'foo' class TC_Foo < Test::Unit::TestCase def test_foo # テストコード... end end
標準添付ライブラリ (2) 基礎力確認問題より
Q27. socket ライブラリにあるクラスを全て選べ.
以下, 解答.
- UDPSocket
- BasicSocket
- TCPSocket
以下, 解説より抜粋.
- socket ライブラリに, BasicServer クラスや UDPServer クラスは存在しない
- ちなみに, TCPSerever は存在する (TCP/IP ストリーム型接続のサーバ側のソケットのクラス)
尚, BasicSocket を親として, 以下のような親子関係になっている.
# Ruby 2.5.1 で確認 (activesupport が Ruby 2.2.2 以上を要求する為) irb(main):001:0> require 'active_support/core_ext/class/subclasses' => true irb(main):002:0> require 'socket' => true irb(main):003:0> irb(main):004:0> p BasicSocket.subclasses [Socket, IPSocket, UNIXSocket] => [Socket, IPSocket, UNIXSocket] irb(main):005:0> p UNIXSocket.subclasses [UNIXServer] => [UNIXServer] irb(main):006:0> p IPSocket.subclasses [TCPSocket, UDPSocket] => [TCPSocket, UDPSocket] # TCPServer は TCPSocket の子クラスとなる irb(main):007:0> p TCPSocket.subclasses [TCPServer] => [TCPServer]
標準添付ライブラリ (3) 基礎力確認問題より
Q28. 以下の実行結果になるように [ x ] に記述する適切なコードを選べ.
# コード require 'date' date = Date.new(2000, 10, 10) puts date [ x ] 1 # 実行結果 2000-11-10
以下, 解答.
以下, irb にて確認.
irb(main):001:0> require 'date' => true irb(main):002:0> date = Date.new(2000, 10, 10) => #<Date: 2000-10-10 ((2451828j,0s,0n),+0s,2299161j)> irb(main):003:0> puts date >> 1 2000-11-10 => nil
以下, 解説より抜粋.
date + 1
とすると, date の 1 日後の日付を返すdate - 1
とすると, 1 日前の日付を返すdate << 1
は 1 ヶ月前,date >> 1
は 1 ヶ月後を返す
以下, irb にて確認.
irb(main):003:0> puts date >> 1 2000-11-10 => nil irb(main):004:0> puts date + 1 2000-10-11 => nil irb(main):005:0> puts date - 1 2000-10-09 => nil irb(main):006:0> puts date << 1 2000-09-10 => nil irb(main):007:0> puts date >> 1 2000-11-10 => nil
標準添付ライブラリ (4) 基礎力確認問題より
Q29. 以下の記述で適切なものを全て選べ
以下, 解答.
- StringIO は IO と同じインターフェースを持つ
- Float オブジェクトと Rational オブジェクトの演算結果は Float オブジェクトとなる
- DateTime オブジェクトに 1 加算すると, 翌日のデータとなる
# StringIO は IO と同じインターフェースを持つ irb(main):010:0> sio = StringIO.new("hoge", 'r+') => #<StringIO:0x005622d72857a8> irb(main):011:0> sio.read => "hoge" irb(main):012:0> sio.rewind => 0 irb(main):013:0> sio.read(0) => "" irb(main):014:0> sio.read(1) => "h" irb(main):015:0> sio.read(2) => "og" irb(main):016:0> sio.rewind => 0 irb(main):017:0> sio.read(1) => "h" irb(main):018:0> sio.write("OGE") => 3 irb(main):019:0> sio.rewind => 0 irb(main):020:0> sio.read => "hOGE" # Float オブジェクトと Rational オブジェクトの演算結果は Float オブジェクトとなる irb(main):021:0> (1.0 + 1r).class => Float irb(main):022:0> (1 + 1r).class => Rational irb(main):023:0> (1i + 1r).class => Complex irb(main):024:0> (1 + 1i).class => Complex # DateTime オブジェクトに 1 加算すると, 翌日のデータとなる irb(main):001:0> require 'date' => true irb(main):002:0> date.class => DateTime irb(main):004:0> date = DateTime.now() => #<DateTime: 2018-07-15T09:31:32+09:00 ((2458315j,1892s,381051256n),+32400s,2299161j)> irb(main):005:0> date + 1 => #<DateTime: 2018-07-16T09:31:32+09:00 ((2458316j,1892s,381051256n),+32400s,2299161j)>
以下, 解説より抜粋.
- rdoc において
*
は番号無しのリストを生成する - Thread クラスには
run
は無い- インスタンスメソッドには
run
は存在する- ドキュメントより引用:
停止状態(stop)のスレッドを再開させます。 Thread#wakeup と異なりすぐにスレッドの切り替えを行います。
- ドキュメントより引用:
- 新しいスレッドを生成するのは
new
,start
,fork
なので注意する
- インスタンスメソッドには
以下, Thread クラスのメソッドを確認した図.
irb(main):001:0> t = Thread.new{} => #<Thread:0x0055b0d90c5dc0 run> irb(main):002:0> t.methods => [:pending_interrupt?, :raise, :join, :value, :kill, :terminate, :exit, :run, :wakeup, :[], :[]=, :key?, :keys, :priority, :priority=, :status, :thread_variable_get, :thread_variable_set, :thread_variables, :thread_variable?, :alive?, :stop?, :abort_on_exception, :abort_on_exception=, :safe_level, :group, :backtrace, :backtrace_locations, :inspect, :set_trace_func, :add_trace_func, :nil?, :===, :=~, :!~, :eql?, :hash, :<=>, :class, :singleton_class, :clone, :dup, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :to_s, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :extend, :display, :method, :public_method, :singleton_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__] irb(main):007:0> t = Thread.new{} => #<Thread:0x0055b0d9089848 run> irb(main):008:0> t = Thread.start{} => #<Thread:0x0055b0d907ca80 run> irb(main):009:0> t = Thread.fork{} => #<Thread:0x0055b0d906b230 run> irb(main):010:0> t = Thread.run{} NoMethodError: undefined method `run' for Thread:Class
標準添付ライブラリ (5) 基礎力確認問題より
Q30. 以下の記述で適切なものを全て選べ
以下のコードは HTTP ダウンロードしたデータを表示するコードである. [ x ] に記述する適切なコードを選べ.
require 'open-uri' [ x ]('https://docs.ruby-lang.org/ja/2.1.0/doc/index.html') do |f| print f.read end
以下, 解答.
- open
以下, irb にて確認
# ページ全体がダンプされないように, 読み込みサイズを指定した (f.read(100)) irb(main):001:0> require 'open-uri' => true irb(main):002:0> irb(main):003:0* open('https://docs.ruby-lang.org/ja/2.1.0/doc/index.html') do |f| irb(main):004:1* print f.read(100) irb(main):005:1> end <!DOCTYPE html> <html lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; cha=> nil
以下, 解説より抜粋.
- open-uri は Kernel モジュールの open (Kernel.#open) を再定義して, HTTP で指定したファイルを取得する
フムフム.