使用UInt8变量定义方法

时间:2016-11-23 19:35:43

标签: crystal-lang

我有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

初始化Object
user = User.new(30_u8)

但有没有办法在没有_u8的情况下自动执行此操作?

PS

问题不仅与UInt8相关,而且与所有Int类型相关

2 个答案:

答案 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或任何其他类,因为类型不会自动转换(据我所知)。

即使它们会自动转换,最好更明确地编码所有的转换。

在您的情况下,创建一个包含所有数字格式的别名(请参阅NumberInt)并在@age = a.to_u8之类的构造函数中设置变量。