Crystal:如何在实例化后增加数组可以容纳的类型数
Crystal: how to increase the number of types an array can hold after instantiation
我正在构建 table 数据。首先,这个 table 的行最容易被键/值填充,所以我使用哈希
a = Hash(Int32, Symbol).new
a[1] = :one
完成后,使用数组会更方便(例如,我需要对数据进行排序)。足够简单:
a.to_a # => [{1, :one}]
但现在我发现,如果我可以在该数组中存储另一种数据类型,那么为了让我的格式化程序正常工作(多页 table,使用乳胶),事情就更有意义了,例如,一个字符串。但为时已晚!数组的类型是固定的;它不会接受字符串。
a << "str" # => ERROR!
到目前为止我想出的解决方案似乎不是很优雅:
a = Hash(Int32, Symbol).new
a[1] = :one
arr = Array(String | Tuple(Int32, Symbol)).new
a.each do |k,v|
arr << {k,v}
end
arr << "str" # no problem now
有没有更"Crystal"/优雅的方式?
只需将 to_a
与 as
一起使用,它可用于转换为文档所称的 "bigger" 类型
a = Hash(Int32, Symbol).new
a[1] = :one
arr = a.to_a.map { |x| x.as(String | Tuple(Int32, Symbol)) }
arr << "str" # [{1, :one}, "str"]
我正在构建 table 数据。首先,这个 table 的行最容易被键/值填充,所以我使用哈希
a = Hash(Int32, Symbol).new
a[1] = :one
完成后,使用数组会更方便(例如,我需要对数据进行排序)。足够简单:
a.to_a # => [{1, :one}]
但现在我发现,如果我可以在该数组中存储另一种数据类型,那么为了让我的格式化程序正常工作(多页 table,使用乳胶),事情就更有意义了,例如,一个字符串。但为时已晚!数组的类型是固定的;它不会接受字符串。
a << "str" # => ERROR!
到目前为止我想出的解决方案似乎不是很优雅:
a = Hash(Int32, Symbol).new
a[1] = :one
arr = Array(String | Tuple(Int32, Symbol)).new
a.each do |k,v|
arr << {k,v}
end
arr << "str" # no problem now
有没有更"Crystal"/优雅的方式?
只需将 to_a
与 as
一起使用,它可用于转换为文档所称的 "bigger" 类型
a = Hash(Int32, Symbol).new
a[1] = :one
arr = a.to_a.map { |x| x.as(String | Tuple(Int32, Symbol)) }
arr << "str" # [{1, :one}, "str"]