为了方便起见,我可以在 Crystal 中命名一个类型吗?
Can I name a type in Crystal for convenience?
在我的新 crystal 项目中,我有一个 class 以几种不同的方式存储其数据,这些方式对我以后很有用,都作为散列。
getter isometry_cardinality : Hash(IsometryKind, Int8)
getter axis_cardinality : Hash(Directions::Orientation, Array(IsometryKind))
我现在想根据其使用的哈希来重载我的方法:
private def has_min_cardinality?(parent_cardinality : Hash(IsometryKind, Int8))
...
end
private def has_min_cardinality?(parent_cardinality : Hash(Directions::Orientation, Array(IsometryKind))
...
end
如您所见,该声明变得很长。有什么方便的方法可以缩短它吗?例如,我可以使用 getter 作为其类型的别名吗?
private def has_min_cardinality?(parent_cardinality : isometry_cardinality)
...
end
private def has_min_cardinality?(parent_cardinality : axis_cardinality)
...
end
答案是 'no' 到 那个 具体例子,所以我的问题是:我错过了正确的方法吗?
是的,有更好的方法:alias
拯救!
您可以像本示例中那样为复杂类型设置别名并使用别名,编译器会直接替换它,因此不会影响性能。
alias IsometryCardinality = Hash(IsometryKind, Int8)
alias AxisCardinality = Hash(Directions::Orientation, Array(IsometryKind))
getter isometry_cardinality : IsometryCardinality
getter axis_cardinality : AxisCardinality
...
private def has_min_cardinality?(parent_cardinality : IsometryCardinality)
...
end
private def has_min_cardinality?(parent_cardinality : AxisCardinality)
...
end
在我的新 crystal 项目中,我有一个 class 以几种不同的方式存储其数据,这些方式对我以后很有用,都作为散列。
getter isometry_cardinality : Hash(IsometryKind, Int8)
getter axis_cardinality : Hash(Directions::Orientation, Array(IsometryKind))
我现在想根据其使用的哈希来重载我的方法:
private def has_min_cardinality?(parent_cardinality : Hash(IsometryKind, Int8))
...
end
private def has_min_cardinality?(parent_cardinality : Hash(Directions::Orientation, Array(IsometryKind))
...
end
如您所见,该声明变得很长。有什么方便的方法可以缩短它吗?例如,我可以使用 getter 作为其类型的别名吗?
private def has_min_cardinality?(parent_cardinality : isometry_cardinality)
...
end
private def has_min_cardinality?(parent_cardinality : axis_cardinality)
...
end
答案是 'no' 到 那个 具体例子,所以我的问题是:我错过了正确的方法吗?
是的,有更好的方法:alias
拯救!
您可以像本示例中那样为复杂类型设置别名并使用别名,编译器会直接替换它,因此不会影响性能。
alias IsometryCardinality = Hash(IsometryKind, Int8)
alias AxisCardinality = Hash(Directions::Orientation, Array(IsometryKind))
getter isometry_cardinality : IsometryCardinality
getter axis_cardinality : AxisCardinality
...
private def has_min_cardinality?(parent_cardinality : IsometryCardinality)
...
end
private def has_min_cardinality?(parent_cardinality : AxisCardinality)
...
end