我有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
类型相关
答案 0 :(得分:1)
你可以这样做:
class User
getter age : UInt8
def initialize(age : Number)
@age = age.to_u8
end
end
user = User.new(30)
答案 1 :(得分:0)
我认为你不能轻易解决它。
尝试运行puts 1.class
,您会看到Int32
。这意味着如果您只键入一个数字,则会获得Int32
个实例。它不能自动转换为Uint8
或任何其他类,因为类型不会自动转换(据我所知)。
即使它们会自动转换,最好更明确地编码所有的转换。
在您的情况下,创建一个包含所有数字格式的别名(请参阅Number
或Int
)并在@age = a.to_u8
之类的构造函数中设置变量。