Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 单一方法类方法_Scala - Fatal编程技术网

Scala 单一方法类方法

Scala 单一方法类方法,scala,Scala,我看到了同事编写的单个方法类的以下代码: class Foo(boo: Boo){ def doSomething() {...} } 其中有应用程序配置数据的数据初始化。我想知道它比下面的方法有什么优势 object Foo { def doSomething(boo: Boo){...} } 我认为,这种方法更适合于在一个位置创建一个而不是类,并且在另一个无法访问参数的位置调用该方法的情况。就我所见,它不用于上述情况。就这两种方法的比较而言,还有什么 第二种方法在内存和性能方

我看到了同事编写的单个方法类的以下代码:

class Foo(boo: Boo){
  def doSomething() {...}
}
其中有应用程序配置数据的数据初始化。我想知道它比下面的方法有什么优势

object Foo {
  def doSomething(boo: Boo){...}
}  

我认为,这种方法更适合于在一个位置创建一个而不是类,并且在另一个无法访问参数的位置调用该方法的情况。就我所见,它不用于上述情况。就这两种方法的比较而言,还有什么

第二种方法在内存和性能方面更好,因为它不需要每次调用该方法时都进行对象实例化

但是,如果要添加新参数,第一种方法可能更易于维护。如果在方法中完成的计算需要对
Foo
的特定实例进行某种形式的缓存,您也可以简单地添加新字段


一般而言,In取决于更广泛的背景,应首选哪种方式。对于配置数据或其他上下文持有者,第二种方法可能更有意义,因为它们无论如何都不应该被一些随机实例引用。

这主要是一个品味问题。我同意您的观点,在这里使用
对象
可能更好,因为它避免了不必要的类
Foo
分配。另一方面,值类也将是“无分配”的,并且在幕后执行类似于singleton对象的操作:

trait Boo

class Foo(val boo: Boo) extends AnyVal {
  def doSomething() = ???
}

谢谢你们的投入。我从来没有用这种方式编写代码。代码让我想知道我是否错过了过去的事情。在构造函数需要很长时间才能完成的情况下,请考虑第一种方法的另一个优点。在这种情况下,构造函数可以在应用程序启动时调用,我认为这在很大程度上是Java开发方式的遗留问题。使用Spring/Guice,如果您使用第一种方法,那么就很容易获得框架来管理Foo的配置和注入。