通过在ruby中保留数据类型来读取输入

时间:2013-10-10 05:00:49

标签: ruby

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

2 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

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

number = gets.to_i

但是如果你不太确定,或者需要覆盖转换多种可能的类型,你需要测试哪些类型的字符串可以合理地预先转换,并且仅在之后应用转换。有关示例,请参阅Test if string is a number in Ruby on Rails

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

答案 1 :(得分: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

当然,这是非人类输入的有用方式。您可以使用字符串转储执行任何操作,只需将其写入文件或通过网络发送即可。