1

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

我知道我可以用初始化 Object_u8

user = User.new(30_u8)

但是有没有办法自动做到这一点_u8

附言

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

4

2 回答 2

1

你可以这样做:

class User
  getter age : UInt8

  def initialize(age : Number)
    @age = age.to_u8
  end
end

user = User.new(30)
于 2017-03-24T02:40:07.253 回答
0

我认为你不能轻易解决它。

尝试运行puts 1.class,你会看到Int32。这意味着如果你只输入一个数字,你就会得到Int32实例。它不能自动转换为Uint8或任何其他类,因为类型不会自动转换(据我所知)。

即使它们会被自动转换,最好更明确地编写所有这些转换。

在您的情况下,创建一个具有所有数字格式的别名(阅读有关Numberor Int)并在构造函数中设置变量,例如@age = a.to_u8.

于 2016-12-15T15:07:34.050 回答