Scala Functions as object vs class
我不完全确定该怎么用。不同之处在于如何运行它们?
1 2 3 4 5 6 7 8
| 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,根据它们得到的函数,这些函数的作用略有不同:如何编写当前scala函数特征?
请回答1)一般情况,2)特殊情况。
附言:我试着把关于如何讨价还价的问题和阶级或对象的问题分开来——在这里似乎效果不太好。
- scala中对象和类之间的差异可能重复
- @迪玛:我的编辑澄清了我想知道的吗?
- val myFunction3: (Int, Int) => Double = (a,b) => a/b出了什么问题?
- @贾斯珀:没什么问题;-)。以上函数只是更复杂函数的示例。这个想法是要有某种特定类型的功能(特性),而S.O.需要实现它,将实现放到我的框架中。
- @不是真的,不是…您似乎在说您知道类和对象之间的区别,但不知道它们的用途。这没有任何意义。
这取决于你想做什么!
scala中的apply()函数只是语法糖〔1,2〕,它允许您使用MyObject(x)作为MyObject.apply(x)的简写。
scala中的对象是单例对象,这意味着最多只能有一个类实例。因此,您可以调用MyFunction2(1,2)。
类是具有已知字段和函数的类型。它是您试图用代码建模的内容的定义。因此,您不能调用MyFunction1(1,2),因为您需要类的一个实例来访问它的字段和函数。
正因为如此,你可能想重新思考你想做什么。从这个意义上讲,类和对象不是简单的数学函数,您定义对象x、对象y,…,然后使用x(…)和y(…)。您想要创建的是一个类或一个对象(即singleton类),您可以在其中定义函数,例如。
1 2 3 4 5 6 7 8 9 10 11
| object Calculator {
def add (a : Int, b :Int ): Int = {
return a + b
}
def subtract (a : Int, b : Int ): Int = {
return a - b
}
} |
然后可以使用它调用函数,例如Calculator.add(2,3)。
或
你也会用它
1 2
| val calc = new Calculator
calc. add(3, 2) |
同样,您会发现您可以使用object Calculator,而无需创建实例。可以将Scala对象中定义的字段和参数与Java类中的静态字段进行比较,也可以在不创建实例化类的对象的情况下访问它们。你应该选择哪一个完全取决于你想要编程的内容。为了找出原因,您可能需要读取scala中对象和类之间的区别。
- 我澄清了我的问题-也许我从问题的角度考虑了很多…?