8

假设我有一个函数,它接受一些输入结构并返回一些输出结构(可能与输入结构相关但不同)。

我不想将这些输入/输出结构强制执行为特定类型,我只想确保它们具有我需要的一些行为。

我是不是该?

a) 定义一个具有适当提取方法的类并强制输入数据成为该类的实例?
b) 让函数接受另一个参数,该参数是定义如何提取数据的函数。

我对输出结构也有同样的问题(除了这次所需的功能是突变)?

4

4 回答 4

10

每当您必须在显式函数参数和类型类之间进行选择时,您应该问自己这个最重要的问题:函数是特定于类型还是特定于应用程序?前者sort的例子是 ,后者的例子是map

传递函数总是更灵活,但对于您的情况可能会过度杀伤并导致不必要的代码膨胀。另一方面,类型类会产生更小的代码,但它们也不太灵活。

没有更多信息,无法在这里给出更准确的答案。

于 2012-07-11T00:55:31.457 回答
3

这取决于。

类型类的优点是您不必将函数显式传递给任何辅助函数。因此,如果您有两个以上的函数,或者如果您希望很多函数可以使用相同的基本转换函数,那么类型类可能会更好。

于 2012-07-11T00:07:05.040 回答
0

类型类提供类型到函数的唯一映射。因此,您应该询问您是否总是需要为一个类型提供相同的功能。例如,如果您将向量传递给函数并且您的函数需要向量的范数,那么使用类型类通常不是一个好主意,因为有许多有用的范数。在这种情况下,最好使用函数参数。

于 2012-07-19T07:26:08.003 回答
0

“我只是想确保他们有一些我需要的行为。” – 这几乎描述了类型类的用途,我会同意的。虽然不确定输出结构,但我认为函数必须返回特定类型,即使它们是同一类型类的实例,您也不能返回几种类型中的一种。

于 2012-07-11T00:09:48.577 回答