0

Rubyでデータ型を保持して入力を読み取る方法はありますか? gets メソッドを使用すると、読み取られる値は文字列になります。入力の型が事前にわからないため、文字列の入力を必要な型に変換できません。助けてください

4

2 に答える 2

0

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

もちろん、人間以外の入力には便利な方法です。文字列ダンプをファイルに書き込んだり、ネットワーク経由で送信したりして、必要なことは何でもできます。

于 2013-10-10T07:07:00.403 に答える
0

入力タイプが事前にわからないため、文字列入力を必要なタイプに変換できません。助けてください

Ruby にも同じ問題があります。ユーザー入力が何を意図していたのか、プログラムが何をしたいのかを知る方法がありません。このString型は、キーボードからの文字データ、またはファイルからのバイト ストリームを受け入れるのに理想的です。何を入力し、どのように解釈するかは、あなた次第です。

Rubyでデータ型を保持して入力を読み取る方法はありますか?

String一般的なキーボード入力に適用されるものを除いて、データ型はありません。しかし、すべてが失われるわけではありません。さまざまな手法を使用して、使用可能な数値、日付、IP アドレスなど、入力が必要なものを抽出できます。

入力値が整数であることがわかっている場合は、次のように単純に入力から使用可能な Ruby 数値を取得できます。

number = gets.to_i

しかし、確信が持てない場合、または複数の可能な型の変換をカバーする必要がある場合は、文字列を合理的に変換できる型を前もってテストし、後でのみ変換を適用する必要があります。例については、Ruby on Rails で文字列が数値かどうかをテストするを参照してください。

これを行う一般的な方法はありません。アプリケーションの性質に応じて、どの変換をテストして試行するかを決定する必要があります。最も適切なRuby型に自動変換する必要がある場合、この問題を軽減できるgemが1つか2つあるかもしれませんが、そのようなものが存在する場合でも、戻り値のクラスをテストする必要がありますアプリケーションがデータに対して何をすべきか、またはできるかを決定するためです (浮動小数点数が必要なときに日付/時刻を取得するのはあまり役に立ちません)。

于 2013-10-10T07:02:43.963 に答える