泛型类型转换



我正在尝试创建一个方法,该方法从用户那里获取输入并将其转换为指定的类型。有没有一种方法可以做到这一点,而不必为每种类型重写。

类似这样的东西:

struct Input(InputType)
def self.get_from_stdin(msg_fail : String = "Error! Wrong type, please reenter: ")
input = gets
begin
input = input.to_s.to(InputType)
rescue
puts msg_fail
input = Input(InputType).get_from_stdin
end
input
end
end
age = Input(Int32).get_from_stdin("Age must be a number, please reenter: ")

基本上,我想实现类似的目标:

foo = foo.to(MyType)

我想如果没有宏,这将很难做到。

与其干扰泛型或宏,我会研究减少样板的方法。这就是将通用代码提取到一个屈服方法中,然后为您想要处理的每种情况编写特定的方法。

def prompt_user(prompt)
print prompt
print ' '
loop do
input = gets
if input && !input.strip.empty?
break yield input
else
print "Please enter a value: "
end
rescue
print "Wrong type, please reenter: "
end
end
def prompt_int32(prompt)
prompt_user(prompt, &.to_i32)
end
def prompt_my_thing(prompt)
prompt_user(prompt) {|value| MyThing.parse value }
end

您真正想做什么?你正在处理的具体案件是什么?正如您已经暗示的那样,当然不能接受任意字符串并将其转换为任何其他对象,因为这将是非常不安全/不健全的。但是,如果我们知道您的用例,我们可以给出一些更好的建议。

相关内容

  • 没有找到相关文章

最新更新