匿名質問者

Rubyの型変換

現在プログラミングの初歩の初歩を勉強している者です。
Rubyにおける型変換、
例えばPythonでいうところのstr(number)のような文法があるのかないのか、
教えていただきたいです。

数値を文字列に直すという方法は別に知っているのですが、
単に文法としてこういうものがあるのかどうかを知りたいです。
よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2019/01/22 20:38:38

ベストアンサー

匿名回答1号 No.1

スマートフォンから投稿

rubyでの型変換(キャスト)は以下のような感じです。

to_iメソッドは、文字列を10進数の表現と見なして整数に変換します。

文字列の先頭から10進数と見なせる部分を切り取って変換します。見なせる部分がなければ0を返します。

s = "1993"
puts s.to_i //1993

s = "12 Angry Men"
puts s.to_i //12

s = "cat"
puts s.to_i //0


引数baseで文字列が何進数を表しているかを指定できます。デフォルト値は10なので、引数を指定しないときは10進数になります。

baseを0とすると10進数になり、負の値を指定すると例外ArgumentErrorが発生します。

s = "1010"
puts s.to_i(2) //10

s = "0xa0"
puts s.to_i(16) //160

s = "gg"
puts s.to_i(17) //288

以下使い方は同様です。

hex : 16進数を整数に変換。
oct : 8進数を整数に変換。
to_f : 浮動小数点数に変換。
to_s (Fixnum) : 整数を文字列に変換。

匿名質問者

回答ありがとうございます。

ええと、to_iメソッド及びto_sメソッド自体は既に知っていたのですが、
やはりこうしないとRubyではキャストができないのですね。

他の言語だとキャスト用の文法が用意されているものが多く、
Pythonのstr(number)、Javaでの(String)number、PHPでの(string)$numberなどと
同等の文法はないのかなと思ったのです。

ないということがわかってすっきりしました。
ありがとうございます。

2019/01/22 20:38:30

その他の回答1件)

匿名回答1号 No.1

スマートフォンから投稿ここでベストアンサー

rubyでの型変換(キャスト)は以下のような感じです。

to_iメソッドは、文字列を10進数の表現と見なして整数に変換します。

文字列の先頭から10進数と見なせる部分を切り取って変換します。見なせる部分がなければ0を返します。

s = "1993"
puts s.to_i //1993

s = "12 Angry Men"
puts s.to_i //12

s = "cat"
puts s.to_i //0


引数baseで文字列が何進数を表しているかを指定できます。デフォルト値は10なので、引数を指定しないときは10進数になります。

baseを0とすると10進数になり、負の値を指定すると例外ArgumentErrorが発生します。

s = "1010"
puts s.to_i(2) //10

s = "0xa0"
puts s.to_i(16) //160

s = "gg"
puts s.to_i(17) //288

以下使い方は同様です。

hex : 16進数を整数に変換。
oct : 8進数を整数に変換。
to_f : 浮動小数点数に変換。
to_s (Fixnum) : 整数を文字列に変換。

匿名質問者

回答ありがとうございます。

ええと、to_iメソッド及びto_sメソッド自体は既に知っていたのですが、
やはりこうしないとRubyではキャストができないのですね。

他の言語だとキャスト用の文法が用意されているものが多く、
Pythonのstr(number)、Javaでの(String)number、PHPでの(string)$numberなどと
同等の文法はないのかなと思ったのです。

ないということがわかってすっきりしました。
ありがとうございます。

2019/01/22 20:38:30
匿名回答1号 No.2

スマートフォンから投稿

ごめんなさい、さっきの回答になってなかっですね、質問最後まで読んでなかったです。rubyにはpython的なキャストの書き方はないと思います。

匿名質問者

ありがとうございます!
すみません、私も上の回答だけ見て答えてしまいました。

こちらでも追加回答してくださりありがとうございます。
詳しい方にはっきりと「ない」と言ってほしかったので、
あなたの回答を得て非常にすっきりしました。

2019/01/22 20:40:47
  • 匿名回答2号
    匿名回答2号 2019/01/23 11:40:39
    一応、以下のようにして変換することはできるようです。

    String(123)
    => "123"

    Integer("123")
    => 123

    Integer("123").class
    => Integer
  • 匿名質問者
    匿名質問者 2019/01/23 19:10:52
    ありがとうございます!
    なるほど、このようにキャストもできるのですね。
    ただみなさんto_iメソッド、to_sメソッドを使うことの方が
    圧倒的に多い、ということなのでしょうか……。
    ご回答ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません