我有一个“数据端点”集合。每个端点都有一个名称,可以使用也可以不使用。在Ruby中,我想将可用的端点显示为Hash,以使其易于使用。困难在于获取有关端点的信息的成本很高,应该懒惰地完成。
一些我希望我的对象如何表现的例子:
endpoints = get_endpoints.call # No endpoint information is accessed yet
result = endpoints['name1'] # This should only query endpoint "name1"
is_available = endpoints.key? 'name2' # This should only query endpoint "name2"
all_available = endpoints.keys # This has to query all endpoints
注释描述了对象内部如何向“数据端点”发出请求。
straightforward是一个可以执行前两行的哈希。但是我不知道如何支持最后两行。为此,我需要一种使键变为惰性的方式,而不仅仅是值。
谢谢您的光临!
答案 0 :(得分:0)
您必须重写key?
方法,并在那里进行自己的检查。
class LazyHash < Hash
def key?(key)
# Do your checking here. However that looks for your application
end
end
在我看来,您是在自找麻烦。可预期性是计算机科学中最强大的优点之一。如果要更改某事物的行为,对其进行远远超出其意图的修改,则它不能使您继续使用原始名称进行调用。您无需将解决方案引入现有的类/接口中。
编程为您提供了很大的灵活性,因此您可以 做这样的事情(当然取决于语言),但是在同一论点中,您没有理由不简单地构建一个新对象/ service使用自己的API。
我建议从一个新的类重新开始,并建立所需的界面和功能。
class LazyEndpoints
def on?(name)
end
def set(name, value)
end
end
(或类似的东西,世界就是你的生命!)