如何解决在仅将方法分配给一个实例之前,如何同时将其分配给多个实例?
| 在我的假设应用程序中,用户可以提出问题,然后以“ 0”回答。您可以使用Predictor.predictor
方法获得适当的ѭ0ѭ,然后您可以向其提出问题。当您对问题“ 3”回答时,您会得到一个答案,以及对它的回答“ 0”的确定性(0..1范围内的浮点数)。
class BaseOracle; def ask(question); ...; end; end
class UnreliableOracle < BaseOracle; ...; end
module Predictor
def self.predictor
@predictor ||= UnreliableOracle.new
end
end
Predictor.predictor.ask(\"How many fingers am I holding up?\")
# => [\"three fingers\",0.2]
在此实现中,您每次都会获得一个UnreliableOracle实例相同的Oracle。我想做的就是更改Predictor.predictor的实现,以便将在其上调用的方法委托给一组Oracle,其中一些优于其他Oracle。换句话说,我希望它能像这样工作:
class BaseOracle; ...; end
class UnreliableOracle < BaseOracle; ...; end
class PopCultureOracle < BaseOracle; ...; end
class ScienceOracle < BaseOracle; ...; end
class LiteraryOracle < BaseOracle; ...; end
class FingerCountingOracle < BaseOracle; ...; end
module Predictor
def self.predictor
############## What goes here?
end
end
# This actually asks several oracles for an answer and picks the best one.
Predictor.predictor.ask(\"How many fingers am I holding up?\")
# => [\"four fingers\",1.0]
最好的方法是什么?
解决方法
这本质上是策略设计模式,其中每个Oracle实际上都是回答问题的策略。
最简单(也许最干净)的方法是构造一个“ 7”,询问其他预言者正确的答案是什么,并选择最佳答案:
class MetaOracle
def oracles
@oracles ||= [ScienceOracle.new,LiteraryOracle.new,# ...
end
def ask(question)
oracles.map { |o| o.ask question }. # Ask each Oracle a question ...
sort_by { |answer| -answer.certainty }. # sort by the best answers ...
first # ... and pick the best one.
end
end
module Predictor
def self.predictor
@predictor ||= MetaOracle.new
end
end
现在,具有最佳答案的Oracle将赢得胜利,它将成为您所看到的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。