我在斯卡拉有一个特点,有一个单一的方法。将其称为Computable,单个方法是compute(input:Int):Int。我不知道我是否应该Scala中的特征,函数N或特征继承函数N?
- 把它作为一个单独的方法独立的特点。
- 从(Int => Int)继承并将“compute”重命名为“apply”。
- 只需摆脱Computable并使用(Int => Int)。
赞成它是一个特质的一个因素是,我可以有用地添加一些额外的方法。但是,当然如果它们都是用计算方法实现的,那么我可以将它们分解成单独的对象。
有利于使用函数类型的一个因素是简单性,以及匿名函数的语法比匿名的Computable实例更简洁的事实。但是之后我无法区分实际上是Computable实例的对象,这些对象是将Int映射到Int的其他函数,但并不意味着它们与Computable在同一个上下文中使用。
其他人如何解决这类问题?这里没有对或错的答案;我只是在寻找建议。
好的,这样可以使任何具有计算方法的对象可用作Computable。但是我更感兴趣知道的是,对于使Computable成为函数类型还是反对,有哪些考虑? 我注意到的一个问题是,如果Computable是一个函数类型,那么实现它的类不能是任何其他函数类型。如果我有另一个继承自(String => String)的接口,Displayable,那么一个类不能同时为Computable和Displayable,因为它会从两个特征继承Function1,但具有不同的类型参数。 – 2010-06-18 10:54:13
没错,这是反对扩展(或直接使用)Int => Int的一个论据。如果您期望这将是典型的用例,那么自定义名称可能会更好。 – 2010-06-18 11:00:51