🖥

RubyエンジニアだけどRuby Silver の対策練習問題を解いてみたい

2023/09/01に公開

問題

http://www.minituku.net/drills/775230600.html

以下の選択肢のうち、エラーにならずに正常に実行が完了するコードを1つ選択してください。

(a) 1..10.to_s

1から10の範囲を文字列にしている。to_sでエラーが起こるのはnilぐらいで、あとは何でも文字列にできそうな気がするが。
やや安直な気もするけどこれを回答として選んだ。

(b) 10.*(0xFace)

数字の10に掛け算をして、なにかバイト列のようなものを渡してる。
いかにもエラーが起こりそうな気がするけど、これ何?

(c) 10.+("10")

数字の10にメソッドチェーンして + メソッドを実行し、引数に文字列を渡している。いかにもエラーが起きそうだが。

ところでRubyでは数値もオブジェクトであり、 + もメソッドとして実行できそうな気もするけれど。

(d) Time.now.strftime(1999, 12, 11)

現在時刻に対して strftime してるけど、 strftime って何をなにするんだっけw
少なくとも現在時刻に対して特定の日付を渡しているのはおかしいので、エラーが起きそうな気もする、

実行結果

a

1..10.to_s
# ArgumentError: bad value for range

引っ掛けだった…。(?)
どこが何の引数よ。

文法を正せば範囲をStringにもできる

(1..10).to_s
# => "1..10"

b

10.*(0xFace)
# => 642060

よくわからないがこれが正解だった

調べると 0x に続く Face は16進数の様子。

"%#x" % 64206
#=> "0xface"
"%#x" % 1
# => "0x1"
"%#x" % 2
# => "0x2"
"%#x" % 15
# => "0xf"
"%#x" % 16
# => "0x10"

https://docs.ruby-lang.org/ja/latest/method/String/i/=25.html

c

10.+("10")
# TypeError: String can't be coerced into Integer

やはり引数の文字列がネックのようだ

10.+(10)
# => 20

d

Time.now.strftime(1999, 12, 11)
# ArgumentError: wrong number of arguments (given 3, expected 1)

strftimeは文字列の引数を1個だけ渡すやつだった

Time.now.strftime("%m/%d/%Y")
# => "05/05/2022"

結果

Rubyエンジニア惨敗。がんばれ!

チャットメンバー募集

オープンチャット「アジト 〜プログラマの巣窟〜」

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2022-05-05

Discussion