如果集合支持字符串索引,那么什么是一种有效的、鲁莽的测试方法?
长版本:
我想让我的一个类规范化某些值。为了实现这一点,实例将值集合作为其“values”属性。我想
values=
接受列表(整数索引集合,包括内置数组)和关联数组(对象索引集合,如哈希)。如果传递一个列表,它将通过反转键和值将该列表转换为关联数组。这意味着该方法需要区分列表和关联数组。它还应该在任何索引集合上工作,而不仅仅是数组和哈希的后代,因此任何嗅探集合类型的类型都被认为是丑陋和错误的。但是,类型嗅探索引类型…
目前,我使用异常来说明不同之处,但我更喜欢将异常用于异常情况,而不是一般的控制结构。这只是个人喜好,我不太喜欢。如果例外是解决这个问题的红宝石方法,请告诉我。
def values=(values)
begin
values['']
@values = values.dup
rescue TypeError
@values = Hash[ values.zip((0..values.length-1).to_a) ]
end
@values.each_value { |v| @values[v] = v}
end
注:完整的解决方案将采用
values
但是现在我可以假定
价值观
来自不同的域。
所有这一切的重点是启用如下代码:
toggle.values = [:off, :on]
toggle.normalise(:off) == 0
toggle.normalise(1) == 1
bool.values = {:off => 0, :false => 0, :no => 0,
:on => 1, :true => 1, :yes => 1}
bool.normalise(:yes) == 1
bool.normalise(0) == 0
这是一个私人项目,所以优雅和红宝石的方式是最重要的。我正在寻找有趣的方法,特别是如果它们能说明一个有趣的概念(例如“异常可以用作行为测试”)。