是否可以仅针对有限类型扩展 class?
Is it possible to extend class for limited types only?
我只想将 normalize
方法添加到数字数组(浮点数和整数),因为它对字符串没有意义。但是它不会编译,这可能吗?
class Array(Number)
def normalize
multiplier = 1 / max
map{ |v| multiplier * v }
end
end
p [1, 2].normalize
这是不可能的,我相信您已经看到了。因此,您有两个选择。
1) 您可以将 class 扩展为一个只使用您想要的类型的新类型。
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
我只想将 normalize
方法添加到数字数组(浮点数和整数),因为它对字符串没有意义。但是它不会编译,这可能吗?
class Array(Number)
def normalize
multiplier = 1 / max
map{ |v| multiplier * v }
end
end
p [1, 2].normalize
这是不可能的,我相信您已经看到了。因此,您有两个选择。
1) 您可以将 class 扩展为一个只使用您想要的类型的新类型。
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