给出一套元组类在一个面向对象的语言:对,三和四,应该三类对和四类三人?

这一问题,因为在我看来,是否一个三人应当可取代的作为对,并同样的四对三人或对。是否三 也是 一对四 也是 一个三人和一对。

在一个背景下,这种关系可能是有价值的,为扩展性的-今天这件事情的返回对的事情,明天我需要它来返回的一个三人,而不打破现有呼叫者,谁是只采用第一二三。

另一方面,应当他们每个人将不同的类型?我可以看到效益更强的类型检查-在哪里你可以不通过一个三重方法,预计对。

我倾向于使用继承,但是会很赞赏的输入从其他人吗?

PS:在这种情况下的事项,该课程将(的过程)是通用的。

PPS:在一种更主观方面,应该名Tuple2,Tuple3和Tuple4?


编辑:我想到的这些较为松散耦合的团体;没有具体的东西,如x/y的x/y/z坐标,虽然它们可以用这样的。这将是事情像是需要一般的解决方案的多返回值的方法,但在一个形式非常简单的语义学。

这就是说,我有兴趣在所有方面其他人已实际使用的元组。

有帮助吗?

解决方案

元组的不同长度是不同的类型。 (当然,在许多类型的系统反正。)在一个强类型语言,我不认为他们应该是一个集合。

这是一件好事,因为它可以确保更高的安全性。在这里你返回记录的地方,通常有所加上它一起的信息,每个组件是什么隐性知识。这更糟糕的是,如果你在多个值传递比预期的元组 - 那是什么意思?它不适合继承。

另一个潜在的问题是,如果你决定使用重载。如果元组相互继承,那么超载解析将失败的地方不应该。但是,这可能是防止超载,更好的说法。

当然,没有这个,如果你有一个具体的使用情况,发现某些行为会帮助你很重要。

编辑:如果你想的一般信息,请仔细阅读了一下的Haskell或ML系列(ocaml的/ F#),看看他们是如何使用的,然后形成自己的决定。

其他提示

在我看来,你应该做一个通用的元组接口(或使用类似上面提到的集合),并让您对和3元组类实现该接口。这样一来,可以利用多态的,但也让一对使用更简单的实现不是一个任意大小的元组。你可能会想使你的元组接口包括.X和.Y存取速记前两个元素,和更大的元组可以实现自己的速记为适合具有较高的指数项目。

最喜欢的设计相关的问题,答案是 - 这取决于

如果您正在寻找传统的元组设计,Tuple2,Tuple3等是要走的路。与继承的问题是这样的,首先三重的是不是一个类型的一双翅膀。你将如何实现它的equals方法?为三重等于与前两个项目同一个配对?如果你有对的集合,你可以添加三重给它,反之亦然?如果您的域名,这是好的,你可以继承去。

任何情况下,它支付有一个接口/抽象类(也许元组),所有这些实现。

它取决于语义,你需要-

  • 一对立面不是语义上的兼容3-元的类似的对象
  • 一对坐标在北极的空间不是语义上的兼容3-元的坐标在欧几里德的空间

如果你的语义是简单的组合,然后一个一般类Tuple<N> 会更有意义

我用0,1,2或无穷去。例如空,1个对象,你的Pair类,或然后某种类型的集合。

您对甚至可以实现Collection接口。

如果有三个或四个项目之间的特殊关系,它也许应该被命名。

[也许我错过了问题,但我不认为,我想在一个通用的方法来专门连接3样东西的情况]

吉拉德的Bracha 博客中的元组,该我发现有趣读数。

一个点他做(是否正确地或不我还不能判断)为:

  

字面元组最好定义为只读。这其中的一个原因是只读的元组是多个多态。长元组是那些短的亚型:

     

{S。 T. U. V} <= {S. T. U】<= {S. T】<= {S}

     

[和]只读元组是协变:

     

T1 <= T2,S1 {S1。 T1} <= {S2。 T2}

这似乎我的倾向建议使用继承可能是正确的,当他说,一个三人间是的的一对。

将违背amit.dev
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top