はじめに
4月に「Ruby Silver取る!」って意気込んでいたのに、、結局他の事をしてると4月中どころか7月も終わろうとしております。
有言実行できずめちゃめちゃかっこ悪いですが、それでも粘り強く勉強していかないと話にならないので言い訳せずにとれるまで努力します。
ということでまた一歩づつ進んで行くのでそれまでの内容を今日もメモする。
やっていくこと
下記サイトののRuby Silverの問題
今回の問題
次のコードのXXXXに記述するとエラーが発生するコードはどれですか
puts XXXX
選択肢
“0x90”.hex選択肢
’90’選択肢
0b2選択肢
’80’.oct
これ、結論から言うとエラーは0b2のやつなので3番目。
その他は実行はされそうです。
ちなみに実行するとこんなエラーが起こる
irb(main):001:0* puts 0b2 SyntaxError: (irb):1: numeric literal without digits puts 0b2 ^ from /Users/your_user/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'
Numeric Literalっていうのはこいつらのこと
- Integer
- Decimal
- Floating point
digitsというのはこういうやつ。
123.digits => [3, 2, 1]
こういう風になる予定だったけど、自分のRubyバージョンがRuby2.3.1でまだdigit
が使えない状態でした。
なので深く追求せず進めさせてください。
気になる方はこちら
を見ていただければいいと思います
結局は
Numeric literal(数字できているオブジェクト)のくせにdigit(数字)のものでできてねえじゃねーかよ!
っということなんですかね〜?
※理解に苦しんだので詳しい方教えて下さい。
hexモジュール
str.hex
- hexモジュールは、文字列を16進数の表現と見なして整数に変換してくれる
- 文字列の先頭には”0x”が付いていてもいなくても動作する
- 文字列の先頭から16進数と見なせる部分を切り取って変換する
- 16進数と見なせる部分がなければ0を返す
では早速動かしてみる
irb(main):001:0> "0x90".hex => 144
文字列の先頭には”0x”が付いていてもいなくても16進数と思われるところを読み込んで動作するとのことなので以下を試してみる
irb(main):002:0> "90".hex => 144
16進数と思われない文字列がある場合は0を返すとのことなので下記を試してみる
irb(main):003:0> "saniki".hex => 0
ちゃんと0が帰ってきました
octモジュール
str.oct
- octモジュールは、文字列を8進数と見なして整数に変換する
- 文字列の先頭には、”0″や”0o”がなくても動作する
- 文字列の先頭から8進数と見なせる部分を切り取って変換する
- 8進数と見なせる部分がなければ0を返す
ここまで見ると先程取り上げたhexモジュール(16進数)の8進数版という感じですね
ということで動かしてみる。
irb(main):001:0> "0o144".oct => 100
0oを除いて実行する
irb(main):002:0> "144".oct => 100
おそらく8進数でないものにあててみる
irb(main):003:0> "sanuki".oct => 0
この記事はここまで