Tengo un rasgo en Scala que tiene un único método. Llámelo Computable y el único método es calcular (entrada: Int): Int. No puedo determinar si deboRasgo, FunciónN o Rasgo-heredando-FunciónN en Scala?
- Déjalo como un rasgo independiente con un único método.
- Heredar de (Int => Int) y renombrar "calcular" para "aplicar".
- Deshazte de Computable y usa (Int => Int).
Un factor a favor de que sea un rasgo es que podría agregar algunos métodos adicionales. Pero, por supuesto, si todos fueran implementados en términos del método de cómputo, entonces podría simplemente dividirlos en un objeto separado.
Un factor a favor de simplemente usar el tipo de función es la simplicidad y el hecho de que la sintaxis para una función anónima es más concisa que la de una instancia Computable anónima. Pero entonces no tengo manera de distinguir objetos que en realidad son instancias computables de otras funciones que mapean Int a Int, pero no están destinadas a ser utilizadas en el mismo contexto que Computable.
¿Cómo se acercan otras personas a este tipo de problema? No hay respuestas correctas o incorrectas aquí; Solo estoy buscando consejos.
Bien, entonces eso haría que cualquier objeto que tenga un método de cálculo pueda utilizarse como Computable. Pero lo que estaba más interesado en saber es, ¿cuáles son algunas consideraciones a favor o en contra de hacer de Computable un tipo de función? Un problema que he notado es que si Computable es un tipo de función, entonces las clases que lo implementan no pueden ser de otro tipo. Si tuviera otra interfaz, Displayable, heredada de (String => String), una clase no podría ser Computable ni Displayable porque heredaría Function1 de ambos rasgos pero con diferentes parámetros de tipo. –
Correcto, ese es un argumento en contra de extender (o usar directamente) Int => Int. Si espera que ese sea el caso de uso típico, entonces un nombre personalizado podría ser mejor. –