shimadama
11/28/2018 - 2:35 PM

silver_j.md

問題1. 選択肢の中からRubyの予約語ではないものを2つ選択してください。

  • A.super
  • B.begin
  • C.try
  • D.goto

問題2. 以下のコードを実行した出力として正しいものを1つ選択してください。

def foo (a, *b)
 p a
end
foo(1,2,3,4)
  • A.nil
  • B.1
  • C.エラーが発生 *構文エラー、例外などは、一律「エラーが発生」と表記する。
  • D.[]
  • E.[1]

問題3. 以下のコードを実行した時の出力として正しいものを1つ選択してください。

puts({"members" => 193, "year" => 2014}.size)
  • A.15
  • B.6
  • C.4
  • D.2

問題4. 以下のコードを実行した時の出力として正しいものを1つ選択してください。

t = Time.now + (60*60*24)
p t
  • A.実行時の日時が表示される
  • B.実行時の日時から24時間後(86400秒後)の日時が表示される
  • C.エラーが発生
  • D.nil

問題5. ローカル変数の名前として正しいものをすべて選択してください。

  • A._365
  • B.z
  • C.7years
  • D.break
  • E.latitude

問題6. 以下のコードを実行した時の出力として正しいものを選択してください。

(5..8).each_with_index do |val,i|
puts "#{i} #{val}"
end

A.

1 5
2 6
3 7
4 8

B.

0 5
1 6
2 7
3 8

C.

5 1
6 2
7 3
8 4

D.

5 0
6 1
7 2
8 3

E.

エラーが発生

問題7. 以下のコードを実行した出力として正しいものを1つ選択してください。

p 100.downto(90).select{|x| x%2==0}
  • A.[100,99,98,97,96,95,94,93,92,91,90]
  • B.[90,92,94,96,98,100]
  • C.[100,98,96,94,92,90]
  • D.[]

問題8. 以下のコードを実行した時の出力に対して(1)に入る適切な記述を2つ選択してください。

p [1,1,2,3,5,8].__(1)__{|x| x*2}
[出力]
[2,2,4,6,10,16]
  • A.compact
  • B.collect
  • C.map
  • D.flatten
  • E.join

問題9. 以下のコードを実行した出力として正しいものを1つ選択してください。

puts "Ruby on Rails".delete("Rails")
  • A.エラーが発生
  • B.Ruby on
  • C.Rails
  • D.uby on
  • E.Ruby

問題10. ヒアドキュメントを使用して文字列を作成しようとしたが実行時エラーになった。正しく動かすための修正点を2パターン選択してください。

doc = <<EOF
 The quick brown fox
 jumps over the lazy dog
      EOF
  • A.1行目は、doc = <<-EOFと書く
  • B.最後のEOFは>>EOFと書く
  • C.最後のEOFは行頭におく
  • D.1行目は、doc = << EOFと書く

問題11. 以下の(1)に入る適切な記述を1つ選択してください。

h = {1=>2, 3=>4}
h.__(1)__
p h   #=>{}

ary = [1, 2]
ary.__(1)__
p ary     #=>[]
  • A.clear
  • B.remove
  • C.destroy
  • D.empty?

問題12. 以下の(1)に入る適切な記述を2つ選択してください。

a = [1,2,3,4,5]
p __(1)__    #=>[1,2,3]
  • A.a[0..2]
  • B.a[1..2]
  • C.a.slice(0,3)
  • D.a.slice(0...2)

問題13. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

str = "RubyAssociation".chomp
  • A."RubyAssociation\r"
  • B."RubyAssociation"
  • C."RubyAssociation\r\n"
  • D."RubyAssociation\r\n\r\n"

問題14. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

str = "RubyAssociation\r\n".chop
  • A."RubyAssociation"
  • B."RubyAssociation\r"
  • C."RubyAssociation\r\n"
  • D."RubyAssociation\r\n\r\n"

問題15. 以下のコードにおける4行目io.rewindについて正しい説明を1つ選択してください。

File.open("foo.txt","r") do |io|
puts io.gets
 puts io.read
  io.rewind
  p lines = io.readlines
end
  • A.データを全て読み込んで、その各行を要素としてもつ配列を返す
  • B.ファイルポインターをファイルの先頭に移動する
  • C.IO から1バイトを読み込み整数として返す
  • D.レシーバと同じ IO を参照する新しい IO オブジェクトを返す

問題16. 以下のコードを実行した時の出力に対して(1)に入る適切な記述を1つ選択してください。

mozart = ["Symphony","Piano Concerto", "Violin Concerto","Horn Concerto","Violin Sonata"]
listend = ["Symphony","Violin Concerto","Horn Concerto"]
p mozart__(1)__listend
[出力]
["Piano Conerto","Violin Sonata"]
  • A.|
  • B.&
  • C.-
  • D.+

問題17. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

odd = [1,3,5]
even = [2,4,6]
num = odd + even
p num.sort
  • A.nil
  • B.[]
  • C.[1,3,5,2,4,6]
  • D.[1,2,3,4,5,6]

問題18. 下記の正規表現にマッチする文字列を2つ選択してください。

/^[hc].*o$/i
  • A.Hello
  • B.holland
  • C.Cello
  • D.h35L320

問題19. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

Greeting = "Hello Ruby"
Greeting = "Hi Ruby"
p Greeting
  • A.エラーが発生
  • B.Greetingは定数のためwarningが発生するが、"Hi Ruby"と出力される
  • C.Greetingは定数のため"Hello Ruby"が出力される
  • D.Greetingは定数のためwaringが発生して"Hello Ruby"と出力される

問題20. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

p File.join("ruby", "exam","silver")
  • A."./ruby"
  • B."./ruby/exam/silver"
  • C."rubyexamsilver"
  • D."ruby/exam/silver"

問題21. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

class Surface
  attr_reader :s
  def initialize(x,y)
   @s = x * y
  end
end

class Volume < Surface
  attr_reader :v
  def initialize(x,y,z)
    super(x,y)
   @v = x * y * z
  end
end

a = Volume.new(2,5,5)
puts "#{a.v},#{a.s}"
  • A.50,10
  • B.エラーが発生
  • C.50,50
  • D.10,10

問題22. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

string = "test code"
string.slice(0,4)
p string
  • A."test"
  • B."test code"
  • C.nil
  • D.""

問題23. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

puts "ruby".encoding.name
  • A.UTF-8
  • B.エラーが発生
  • C.US-ASCII
  • D.ASCII-8BIT

問題24. ハッシュ内にキーが存在するかどうか調べるメソッドの使いかたとして、誤っているものを1つ選択してください。

cc = {"nz"=>"New Zealand", "ru"=>"Russia", "ar"=>"Argentina"}
  • A. p cc.has_key?('nz')
  • B. p cc.contain?('nz')
  • C. p cc.key?('nz')
  • D. p cc.include?('nz')
  • E. p cc.member?('nz')

問題25. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

p "Hello there".class
p String.superclass

class Foo; end
class Bar < Foo; end
p Foo.superclass
p Bar.superclass

A.

String
Kernel
Module
Module

B.

Object
Module
Object
FooClass

C.

String
Module
String
FooClass

D.

String
Object
Object
Foo

E.

Object
Object
Module
Kernel

問題26. 以下のコードを実行して文字列sの単語毎の出現回数を出力させたい。(1),(2)に入る最適な組み合わせを1つ選択してください。

s = "To be or not to be, that is the question."
hash = Hash.new(0)
s.__(1)__(__(2)__) {|i| hash[i] += 1}
p hash["be"] #=>2
  • A. (1)match (2)/\w+/
  • B. (1)sub (2)/\w+/
  • C. (1)scan (2)/\w+/
  • D. (1)search (2)/\w+/

問題27. 組み込みライブラリ、Integer#chr(encoding)についての説明として正しいものはどれか、2つ選択してください。

  • A.引数を指定しなかった場合はエラーが発生する。
  • B.指定されたエンコーディングでselfを正しく解釈できない場合はnilが返される。
  • C.引数で与えられたencodingにおいて、selfを文字コードと見なし、それに対応する一文字からなる文字列を返す。
  • D.指定されたエンコーディングでselfを正しく解釈できない場合はエラーが発生する。

問題28. 以下のプログラムがerrorと出力する場合(1),(2)に入る最適な組み合わせを1つ選択してください。

s = "foo"
___(1)___
  s[4] = ?b
___(2)___
  puts "error"
end
  • A. (1)は「try」、(2)は「catch NameError」である
  • B. (1)は「try」、(2)は「catch IndexError」である
  • C. (1)は「begin」、(2)は「rescue NameError」である
  • D. (1)は「begin」、(2)は「rescue IndexError」である

問題29. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

ary = []
ary << 1 && false
true || ary << 2
false && ary << 3
false || ary << 4
p ary
  • A. [1, 4]
  • B. [1, 2, 3, 4]
  • C. [1]
  • D. [1, 2, 3]

問題30. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

p "foo" * 2 **2
  • A.エラーが発生
  • B."foo4"
  • C."foofoofoofoo"
  • D."foofoo"

問題31. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

foo = [1,2,3]
bar = foo
baz = foo.dup

bar[3] = 4
p foo
p bar
p baz

A.

[1,2,3]
[1,2,3,4]
[1,2,3]

B.

[1,2,3,4]
[1,2,3,4]
[1,2,3,4]

C.

[1,2,3,4]
[1,2,3,4]
[1,2,3]

D.

エラーが発生

問題32. テキストファイルを読み込んだファイルオブジェクトから一行ずつ読み込み表示したい。目的に一致するIOクラスのメソッドを2つ選択してください。

  • A.readlines
  • B.read
  • C.gets
  • D.readline
  • E.find

問題33. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

str = "a,b,c,d"
p str.split(/,/, 2)
  • A.["a", "b,c,d"]
  • B.["a","b","c","d"]
  • C.["a", "b,c,","d"]
  • D."abcd"

問題34. 以下のコードを実行したときの出力として適切な物を1つ選択してください。

class Object
  def greeting
    print "How are you?\n"
   end
end

[1,2].greeting
  • A.エラーが発生
  • B.nilが表示される
  • C.How are you?
  • D.[1,2]

問題35. 以下の正規表現とマッチするものを1つ選択してください。

/[0-9]{3}-[0-9]{4}/
  • A.0x000000
  • B.0-93-0-94
  • C.93094
  • D.333-4421

問題36. 以下のコードを実行した際の出力として正しいものを選択してください。

/[0-9]{3}-[0-9]{4}/
  • A.[]
  • B.["a", "b", "c", "d", "e", "f"]
  • C.nil
  • D."abcdef"

問題37. 以下のコードを実行した時にIOErrorが発生した。理由として考えられるものはどれか1つ選択してください。

File.open("foo.txt") do |io|
  io.write(Time.now.strftime("%Y/%m/%d"))
end
  • A.書き込みモードでファイルが開かれているため
  • B.読み込み可能なfoo.txtが存在しなかったため。
  • C.読み込みモードでファイルが開かれているため
  • D.読み書き両用モードでファイルが開かれているため

問題38. 次のメソッドでDirクラスのクラスメソッドではないものをすべて選択してください。(2つ選択)

  • A.Dir.rmdir
  • B.Dir.basename
  • C.Dir.pwd
  • D.Dir.extname
  • E.Dir.getwd

問題39. 以下のコードを実行した時の正しい出力結果を1つ選択してください。

puts "0123456789".delete("0-58-")
  • A.234679
  • B.9
  • C.679
  • D.123458
  • E.12345

問題40. 下のコードを実行した時の出力に対して(1),(2)に入る最適な組み合わせを1つ選択してください。

p "100,200,300,400,500".___(1)___.___(2)___
[出力]
"100\n200\n300\n400\n500"
  • A.(1)split(",") (2)join("\n")
  • B.(1)to_a(",") (2)join("\n")
  • C.(1)split(",") (2)concat("\n")
  • D.(1)concat(",") (2)join("\n")

問題41. 以下のコードを出力した時の出力として正しいものを1つ選択してください。

a = "foo"
b = "foo"

puts a.eql?(b)
puts a.equal?(b)

A.

true
true

B.

true
false

C.

false
true

D.

false
false

問題42. 以下のコードを実行した時の正しい出力結果を1つ選択してください。

numbers = [3,89,40,39,29,10,50,59,69]
num = numbers.inject do |i,j|
  i > j ? i : j
end
p num
  • A.89
  • B.40
  • C.10
  • D.59

問題43. 以下のコードを実行した時の正しい出力結果を1つ選択してください。

p String.instance_methods.grep(/strip/)
  • A.[:strip, :lstrip, :rstrip, :strip!, :lstrip!, :rstrip!]
  • B.nil
  • C.[:strip]
  • D.[]
  • E.エラーが発生

問題44. Hashの生成でエラーが発生するものを1つ選択してください。

A.capital ={:Sweden =>"Stockholm", :Norway=>"Oslo", :Finland=>"Helsinki"}
B.capital = {Sweden: "Stockholm", Norway: "Oslo", Finland: "Helsinki"}
C.capital = {"Sweden" = "Stockholm", "Norway" = "Oslo", "Finland" = "Helsinki"}
D.capital = Hash[:Sweden,  "Stockholm", :Norway ,"Oslo", :Finland, "Helsinki"]

問題45. 以下の出力になる時の(1)に入るものとして適切なものを1つ選択してください。

___(1)___ 'uri'
uri = URI::HTTP.build({host:'www.ruby.or.jp', path:'/ja/certification/examination/'})
puts uri

[出力]
http://www.ruby.or.jp/ja/certification/examination/
  • A.require
  • B.include
  • C.extend
  • D.import

問題46. 以下の出力になる時の(1)に入るものとして適切なものを1つ選択してください。

class Foo
  ___(1)___= 0
  def self.count
    ___(1)___ += 1
  end
end

class Bar < Foo
end

puts Foo.count
puts Bar.count

[出力]
1
2
  • A.num
  • B.@num
  • C.@@num

問題47. 以下のコードを実行した時の正しい出力結果を1つ選択してください。

unless false || nil
  print "Hello\n"
end
  • A.Hello
  • B.nil
  • C.何も表示されない
  • D.false

問題48. 以下のコードを実行した時の正しい出力結果を1つ選択してください。

numbers = (1..20).to_a
p numbers.detect{|x| x % 5 == 0}
  • A.nil
  • B.10
  • C.5
  • D.20
  • E.[5,10,15]

問題49. 以下のコードを実行した時の出力結果として正しいものを1つ選択してください。

class NonasciiError < StandardError
end

File.open("sample.txt") do |io|
  io.each_line do |str|
    begin
      raise(NonasciiError, "non ascii character detected") unless str.ascii_only?
    rescue => ex
      puts "#{ex.message} : #{str}"
    end
  end
end

[sample.txtの内容]
Ruby Association
ルビーアソシエーション
るびー
Ruby on Rails
  • A. non ascii character detected : ルビーアソシエーション non ascii character detected : るびー
  • B. 何も表示されない
  • C. non ascii character detected : Ruby Association
  • D. non ascii character detected : Ruby on Rails

問題50 10進数で10を表すものを2つ選択してください。

  • A.0xA
  • B.0xFF
  • C.012
  • D.077
  • E.0x10

解答と解説

問題1

【解答】

C,D


問題2

【解答】

B

【解説】

*がついた引数は可変長引数(rest引数)です。fooメソッドでは最低1つの引数を必要とします。第一引数は変数aで得ることができ、残りの引数は配列に格納されます。


問題3

【解答】

D

【解説】

Hash#sizeはHashの要素の数を返します。


問題4

【解答】

B

【解説】

+ otherでother秒後の日時が返されます。TimeクラスはTime#to_s、Time#to_iなどの変換やmktimeで任意の日時のオブジェクトを作成する方法を理解しておく必要があります。


問題5

【解答】

A,B,E

【解説】

1文字目はアルファベット小文字か_で始める必要があります。また、2文字目以降はアルファベットもしくは数字を使用します。予約語はローカル変数として使用できません。


問題6

【解答】

B

【解説】

eachはRubyで最もよく使われるイテレーター(ブロックが渡されることを想定しているメソッド)です。each_with_indexでは要素とインデックスをブロックに渡して繰り返し実行されます。


問題7

【解答】

C

【解説】

Integer#downto(min)は、引数minまで数を1ずつ減らしながら実行されます。その後、selectメソッドで、要素に対してブロックの評価が真であった要素をすべて含む配列が返されます。


問題8

【解答】

B,C

【解説】

各要素に対してブロックを評価した結果を全て含む配列を返します。Enumerableは頻出問題です。Enumerable#collectに対するEnumerable#map、findに対するdetectなど同じ挙動をするメソッドはRubyの公式ドキュメントを見て覚えておきましょう。


問題9

【解答】

D

【解説】

String#deleteはself(メソッドのレシーバーとなったオブジェクト)に含まれる文字を取り除いた文字列を生成して返します。


問題10

【解答】

A,C

【解説】

ヒアドキュメントは <<識別子' を含む行の次の行から識別子' だけの行の直前までを文字列とする行指向のリテラルです。(Ruby公式ドキュメントより抜粋) 終端行の識別子前に余分な空白を含めるとエラーとなります。ただし、<<-識別子' のように-' を付けて書くことで終端行をインデントすることは可能です。


問題11

【解答】

A

【解説】

clearメソッドは、空の配列、ハッシュを返します。配列とハッシュで類似の動きをするメソッドについて、clearのほかにも、replaceをおさえておきましょう。


問題12

【解答】

A,C

【解説】

Silver試験では配列の添字演算子[ ]の特徴の理解が要求されます。
a = [1,2,3,4,5]
p a[0] #=>1
負の添字も存在します。-1であれば最後の要素となります。
p a[-2] #=>4
長さを指定する場合
p a[0,2] #=>[1,2]
その他の表記法
p a[0..1] #=> [1,2]
p a[0...1] #=>[1]
p a[-2..4] #=>[4.5]
p a[-1..1] #=>[]
今までの表記は下記、Array#[]のシンタックスシュガーです。
p a[].()
p a[].(0) #=>1
Array#sliceはArray#[]の別名です。


問題13

【解答】

B

【解説】

String#chompは文字列末尾の改行文字を削除するためのメソッドです。テキストから文字列を1行ずつ読み込んでいく際に改行文字を削除するような使い方ができます。String#chompは文字列末尾の\r、\r\n、\nを削除しますが、他の文字は削除しません。String#chomp!はレシーバーの文字列自体を変更する破壊的メソッドです。


問題14

【解答】

A

【解説】

String#chopは文字列末尾の文字を1文字削除するためのメソッドです。String#chompが改行文字を対象するのに対しchopはすべての文字を対象とします。ただし、文字列末尾が\r\nの場合は、2文字とも削除します。String#chop!はレシーバーの文字列自体を変更する破壊的メソッドです。


問題15

【解答】

B

【解説】

IO#rewindはファイルポインターを先頭に移動させます。
IOクラスでは、IO#rewindの他に、 seek、gets、read、readlineなどのインスタンスメソッドをドキュメントでチェックしておく必要があります。


問題16

【解答】

C

【解説】

配列の要素(集合)に対して演算子を適用することができます。
試験前に、Array#演算子についてRuby公式ドキュメントを確認しておいてください。
ary1 = [1,2,3,4,5]
ary2 = [3,4,5,6,7]
p ary1 | ary2 #=>[1,2,3,4,5,6,7]
p ary1 & ary2 #=> [3,4,5]
p ary1 - ary2 #=>[1,2]


問題17

【解答】

D

【解説】

Array#+は自身に引数の内容を繋げた配列を返します。この問題では返された配列に対してArray#sortを使い数値を並び替えています。配列を連結するメソッドとしてArray#concatがありますが、こちらは引数で渡された配列を自身に対して破壊的に連結します。


問題18

【解答】

A,C

【解説】

Silverの試験ではアルファベットの大文字小文字を含んだ単語の区別、文字列と数字の簡単な組み合わせなど簡単な正規表現について理解していることを要求されます。問題の正規表現はhもしくはcで始まりoで終わる文字列とマッチします。またiのオプションを付けることにより大文字、小文字の区別を無視しています。


問題19

【解答】

B


問題20

【解答】

D

【解説】

File#joinは定数FILE::SEPARATOR "/"を使って文字列を連結します。


問題21

【解答】

A

【解説】

VolumeクラスはSurfaceクラスを継承しています。
superを使えば、スーパークラスの同名のメソッドを呼び出すことことができます。superには通常のメソッドと同じように引数も指定可能です。


問題22

【解答】

B

【解説】

String#slice(nth, len)は文字列のnth目からlen文字の文字列を作って返します。
String#sliceは非破壊的なので、文字列"test code"が表示されます。代りに破壊的なメソッドであるString#slice!を使用すると、"code"と表示されます。


問題23

【解答】

A

【解説】

Ruby 2.0以降では、デフォルトのスクリプトエンコーディングはUTF-8です。


問題24

【解答】

B

【解説】

以下のメソッドはHashがkeyをキーとして持つときはtrueを返します。
Hash#has_key?(key) -> bool
Hash#include?(key) -> bool
Hash#key?(key) -> bool
Hash#member?(key) -> bool


問題25

【解答】

D

【解説】

class()メソッドはオブジェクトのクラス、superclass()メソッドはそのクラスのスーパークラスを返します。明示的にスーパークラスを指定しない場合はObjectがスーパークラスとなります。


問題26

【解答】

C

【解説】

問題のコードでは正規表現パターンにマッチした文字列が繰り返しブロック引数に渡され実行されます。matchが一度しか正規表現によるマッチを行わないのに対し、scanは繰り返しマッチを行います。正規表現の\wは単語構成文字 [a-zA-Z0-9_]の省略記法です。今回は単語をハッシュのキー、出現回数を値として、単語の出現回数に応じて値をインクリメントさせています。


問題27

【解答】

C,D

【解説】

Integer#chrは文字コードに対応する1文字の文字列を返します。 p 12354.chr(Encoding::UTF_8) #=>"あ" selfを引数で与えられたエンコーディングで正しく解釈できない場合は、RangeErrorが発生します。


問題28

【解答】

D

【解説】

Rubyの例外処理の書き方を以下に示します。
begin
<例外が起こる可能性のある処理>
rescue => <例外オブジェクトが代入される変数>
<例外が起こった場合の処理>
end
Silver試験では、発生する例外の種類と処理に関しての知識が問われます。


問題29

【解答】

A

【解説】

論理演算子の評価方法について、&&演算子においては左辺が真と評価されたときのみ右辺も評価されます。同じように||演算子においては、右辺が評価されるのは、左辺が偽と評価された場合です。


問題30

【解答】

C

【解説】

String#**は定義されていません。 演算子の優先順位は*よりも**が高いため高い 2**2回(4回)"foo"が繰り返される新しい文字列を返します。


問題31

【解答】

C

【解説】

foo,barは同じ配列オブジェクトを参照しています。
例題と同じ内容で以下のメソッドを実行すると、以下のようになります。
foo.object_id # barと同じ整数値
bar.object_id # fooと同じ整数値
baz.object_id # 上記2つとは違う整数値


問題32

【解答】

C,D

【解説】

IO#getsとIO#readlineはファイルオブジェクトから一行読み込んで、読み込みに成功した時にはその文字列を返します。IO#getsとIO#readlineの違いはEOFに到達した時の振る舞いのみです。IO#getsはnil, IO#readlineはEOFErrorを返します。


問題33

【解答】

A

【解説】

String#splitメソッドは引数で指定した特定の文字列を区切り文字として、文字列から配列を生成します。また、第二引数で生成される配列の要素数を指定することもできます。


問題34

【解答】

C

【解説】

ArrayクラスはObjectクラスを継承しています。Rubyでは組み込みクラスを含め定義済みのクラスに対してメソッドを追加することができます。また追加だけではなく既存のメソッドを書き換えることもできます。


問題35

【解答】

D

【解説】

\d、または[0-9]は数字を表しています。{m}は直前の正規表現のm回の繰り返しを意味します。


問題36

【解答】

B


問題37

【解答】

C

【解説】

モードを明示的に指定しない場合、読み込みモード"r"でファイルを開きます。そのため、エラーが発生しています。選択肢Bの場合は、IOErrorではなくErrno::ENOENT(システムコールに依存したエラー)を発生させます。例題では、読み込みモードを"w"として開いた場合のファイルの内容は、Time.nowで得た現在時刻を指定したformat文字列で出力したものになります。(例:2015/06/07)  以下、ファイルオープン時のモード一覧を示します。
"r" 読み込みモード
"w" 書き込みモード。ファイルが存在していればファイルを空にする。
"a" 書き込みモード。ファイルが存在していれば、ファイルの末尾から追記する。
"r+" 読み書き両用モード。ファイルの先頭から読み書きを行う。
"w+" 読み書き両用モード。ファイルが存在していればファイルを空にする。
"a+" 読み書き両用モード。ファイルの末尾から読み書きを行う。


問題38

【解答】

B,D


問題39

【解答】

C

【解説】

String#deleteメソッドでは引数で指定された文字をselfから取り除きます。
-の両端に文字列がある場合は範囲指定をしていることになります。
例題では"0-5"で0から5までの数字を取り除きますが、続く"8-"では範囲指定とは見なされず、8と-を削除します。


問題40

【解答】

A

【解説】

String#splitと対になる動作をするものにArray#joinがあります。 例題ではカンマ区切りになっていた文字列を改行区切りの文字列で出力しています。


問題41

【解答】

B

【解説】

メソッド名の最後に?がつくメソッドは通常tureもしくはfalseを返します。String#eql?メソッドは変数aと変数bの文字列が同じ場合にtrueを返します。一方でString#equal?メソッドは変数aと変数bがひとつの同じ文字列を「参照」している場合はtrueとなります。実際にobject_idを確認してみると、値が違うことがわかります。

p a.object_id #=>70174384459980
p b.object_id #=>70174364485360
(実行環境によって結果は異なります。)


問題42

【解答】

A

【解説】

inject (Enumerable)は前回のブロックの戻り値をブロックに渡して繰り返し実行します。 例題では条件演算子を使い、2つの整数値を比較しより大きな値を取り出しそれをブロックに渡しています。

条件演算子(文法) 式1 ? 式1が真だった場合の値 : 式1が偽だった場合の値


問題43

【解答】

A

【解説】

Enumerable#grepではパターンにマッチする要素を配列にして返します。例題ではStringクラスのインスタンスメソッドで正規表現/strip/の文字列に一致するものを配列で返します。


問題44

【解答】

C

【解説】

Hashを生成する方法はいくつか存在しますが、例題では{}とHashのクラスメソッド[ ]を使用しています。Bのように、キーにシンボルを使う場合はコロンをハッシュキーの最後につけると矢印を省略して書けます。


問題45

【解答】

A

【解説】

uriはRubyに標準で添付されているライブラリーの1つです。requireすることによって、プログラム内で呼び出すことができます。include、extendはモジュールを読み込む際に使用します。importはRuby以外の言語で同様の目的の際に利用されることがありますが、Rubyでは使えません。


問題46

【解答】

C

【解説】

@numと@@numはそれぞれ、インスタンス変数とクラス変数です。クラス変数はクラス定義の中で定義され、クラスの特異メソッド、インスタンスメソッドなどから参照/ 代入ができます。例題ではFooクラスとBarクラスの間で値を共有します。@はインスタンス変数です。インスタンス変数は名前の通り特定のオブジェクトに所属しています。(クラスはclassクラスのオブジェクトのためクラスレベルでのインスタンス変数も存在する)Rubyのオブジェクトモデルをより深く理解したい場合は、Silver合格後にGold試験の受験もおすすめします。


問題47

【解答】

A

【解説】

Rubyでは、falseとnilは偽、falseとnil以外は全て真として扱われます。
unless false || nilの条件はif !false && !nil(詳細はドモルガンの法則を参照)と同じ意味です。


問題48

【解答】

C

【解説】

Enumerable#detectメソッドは要素に対してブロックを評価した値が真になった最初の要素を返します。例題では1~20までの数字に対して一番最初の5の倍数を求めていますので正解はCです。Enumerable#findを使っても同様の結果になります。


問題49

【解答】

A

【解説】

raise関数によって明示的に例外を発生させることができます。例題ではString#ascii_only?を使いテキストにASCII文字以外が使われている場合には例外を発生させています。例外処理の基本形は問題28の解説を参照してください。


問題50

【解答】

A,C

【解説】

0xAは16進数、012は8進数です。いずれも10進数では10となります。
puts "#{0xA}" => 10
puts '#{012}' => #{012}
ダブルクォーテーション内では式展開されますが、シングルクォーテーションでは式展開が行われません。


【利用上の注意】

本問題集を利用したことによる損害が生じてもRubyアソシエーションはその責任を負いません。