我有一个带有UInt8变量的方法:
class User
getter :age
def initialize(@age : Uint8)
end
user = User.new(30)通过这种方式,我得到了错误:
no overload matches 'User.new' with type Int32
Overloads are:
- User.new(age : UInt8)
user = User.new(30)我知道我可以用_u8初始化对象
user = User.new(30_u8)但是,有没有什么方法可以在没有_u8的情况下自动完成
PS
不仅与UInt8有关的问题,而且与所有Int类型有关的问题
发布于 2017-03-24 10:40:07
你可以这样做:
class User
getter age : UInt8
def initialize(age : Number)
@age = age.to_u8
end
end
user = User.new(30)发布于 2016-12-15 23:07:34
我认为你不能轻易地解决它。
尝试运行puts 1.class,您将看到Int32。这意味着如果你只输入一个数字,你就会得到Int32实例。它不能自动转换为Uint8或任何其他类,因为类型不会自动转换(据我所知)。
即使它们将被自动转换,但更明确地对所有转换进行编码也是一种好的做法。
在本例中,创建一个具有所有数字格式的别名(请阅读Number或Int),并在@age = a.to_u8等构造函数中设置变量。
https://stackoverflow.com/questions/40772804
复制相似问题