trait MyFunctionTrait extends ((Int, Int) => Double)
class MyFunction1 extends MyFunctionTrait {
override def apply(a: Int, b: Int) => Double = a/b
}
object MyFunction2 extends MyFunctionTrait {
override def apply(a: Int, b: Int) => Double = a/b
}
Я не совсем уверен, какой из них следует использовать. Различия в том, как их запустить?Scala Функции как объекта против класса
scala> val f = new MyFunction1
f: MyFunction1 = <function2>
scala> f(1,2)
res50: Double = 0.0
scala> MyFunction2(1,2)
res48: Double = 0.0
Я действительно знаю, в чем разница между одноэлементным объектом и классом. Я хочу знать варианты использования в конкретном случае определения функции. Функция объясняется в статьях, но я видел, что она запрограммирована как класс и как объект, поэтому я хотел бы знать, что такое лучшая практика, когда и почему.
В моем конкретном случае я хочу дать еще одну функцию в качестве параметра функции в стиле Карринг, а затем имеют различную MyFunction
, которые делают немного разные вещи в зависимости от того, какие функции они получили: How to write a currying Scala Function trait?
Пожалуйста, ответьте на 1) общий случай, 2) частный случай.
PS: Я попытался отделить вопрос о том, как карри и класс или объект - похоже, не работает так хорошо, прямо здесь.
Возможный дубликат [Разница между объектом и классом в Scala] (http://stackoverflow.com/questions/1755345/difference-between-object-and-class-in- scala) – Dima
@ Dima: Мое редактирование разъясняло, что я хочу знать? – Make42
Что не так с 'val myFunction3: (Int, Int) => Double = (a, b) => a/b'? –