Rubyでデータ型を保持して入力を読み取る方法はありますか? gets メソッドを使用すると、読み取られる値は文字列になります。入力の型が事前にわからないため、文字列の入力を必要な型に変換できません。助けてください
2 に答える
Ruby でオブジェクトを読み書きする方法は、YAMLによって提供されるシリアル化メカニズムを使用することです。
例を次に示します。
require 'yaml'
class A
attr_accessor :value, :text
def initialize
@value = 42
@text = "Hello World"
end
end
s = YAML::dump(A.new)
puts s
puts s.class
a = YAML::load s
puts a.class
puts a.value
ダンプ後に正しいクラスが見つかったこの出力を確認できます
--- !ruby/object:A
value: 42
text: Hello World
String
A
42
もちろん、人間以外の入力には便利な方法です。文字列ダンプをファイルに書き込んだり、ネットワーク経由で送信したりして、必要なことは何でもできます。
入力タイプが事前にわからないため、文字列入力を必要なタイプに変換できません。助けてください
Ruby にも同じ問題があります。ユーザー入力が何を意図していたのか、プログラムが何をしたいのかを知る方法がありません。このString
型は、キーボードからの文字データ、またはファイルからのバイト ストリームを受け入れるのに理想的です。何を入力し、どのように解釈するかは、あなた次第です。
Rubyでデータ型を保持して入力を読み取る方法はありますか?
String
一般的なキーボード入力に適用されるものを除いて、データ型はありません。しかし、すべてが失われるわけではありません。さまざまな手法を使用して、使用可能な数値、日付、IP アドレスなど、入力が必要なものを抽出できます。
入力値が整数であることがわかっている場合は、次のように単純に入力から使用可能な Ruby 数値を取得できます。
number = gets.to_i
しかし、確信が持てない場合、または複数の可能な型の変換をカバーする必要がある場合は、文字列を合理的に変換できる型を前もってテストし、後でのみ変換を適用する必要があります。例については、Ruby on Rails で文字列が数値かどうかをテストするを参照してください。
これを行う一般的な方法はありません。アプリケーションの性質に応じて、どの変換をテストして試行するかを決定する必要があります。最も適切なRuby型に自動変換する必要がある場合、この問題を軽減できるgemが1つか2つあるかもしれませんが、そのようなものが存在する場合でも、戻り値のクラスをテストする必要がありますアプリケーションがデータに対して何をすべきか、またはできるかを決定するためです (浮動小数点数が必要なときに日付/時刻を取得するのはあまり役に立ちません)。