0

有没有办法通过在 ruby​​ 中保留其数据类型来读取输入?如果我使用gets方法,读取的值将是一个字符串。由于事先不知道输入类型,我无法将输入的字符串转换为所需的类型。请帮忙

4

2 回答 2

0

我无法将字符串输入转换为所需的类型,因为事先不知道输入类型。请帮忙

Ruby 也有同样的问题——它无法判断用户输入的意图是什么,或者你的程序想要用它做什么。该String类型非常适合接受来自键盘的字符数据或来自文件的字节流。由您决定输入什么以及如何解释它。

有没有办法通过在 ruby​​ 中保留其数据类型来读取输入?

除了String适用于通用键盘输入的数据类型外,没有其他数据类型。然而,一切都没有丢失。您可以使用多种技术来提取可用的数字、日期、IP 地址或您需要输入的任何内容。

如果您知道输入值应该是整数,则可以从输入中获取可用的 Ruby 数字,如下所示:

number = gets.to_i

但是,如果您不太确定,或者需要涵盖转换多种可能的类型,则需要预先测试可以合理转换字符串的类型,然后再应用转换。例如,请参阅测试字符串是否为 Ruby on Rails 中的数字

没有通用的方法可以做到这一点,您需要根据应用程序的性质决定要测试和尝试哪些转换。如果您确实需要自动转换为最合适的 Ruby 类型,可能有一两个 gem 可以减轻这种痛苦 - 但如果存在这样的事情,您仍然需要测试返回值的类为了决定您的应用程序应该或可以对数据做什么(当您想要一个浮点数时获取日期/时间并没有多大用处)。

于 2013-10-10T07:02:43.963 回答
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 回答