我只想将normalize
方法添加到数字数组(浮点数和整数),因为它对字符串没有意义。但是它不会编译,可能吗?
class Array(Number)
def normalize
multiplier = 1 / max
map{ |v| multiplier * v }
end
end
p [1, 2].normalize
这是不可能的,我确定您已经看到了。因此,您有两个选择。
1)您可以将类扩展为只使用所需类型的新类。
class NumberArray < Array(Number)
# Do something
end
明显的缺点是您不能将Array(Number)
用作NumberArray
。
2)您可以在normalize
方法周围编写保护子句,以检查数组类型并确保它是数字数组。
class Array(T)
def normalize
{% unless T < Number %}
{% raise "Expected Number type for Array#normalize, got #{T}" %}
{% end %}
multiplier = 1 / max
map { |v| multiplier * v }
end
end