【问题标题】:Is there any reason to use classes vs object at all in Scala?在 Scala 中是否有任何理由使用类与对象?
【发布时间】:2019-03-28 06:04:12
【问题描述】:

只是一个先驱,我来自 Java 背景,对 Scala 还很陌生。随着我在 Scala 中进行更多开发并尝试变得更加面向 FP,我意识到我可以制作几乎所有的代码:函数(甚至方法?)包含在 Objects 中(在需要的地方添加一些案例类)。在那种情况下 - 常规课程有什么用吗?

【问题讨论】:

  • 恕我直言,这个问题将非常基于意见,但我不会标记它,看看其他人的想法。无论如何,我的观点 (讽刺意味很大) 关于这一点,它们仍然有用,具体取决于您想要什么。案例类将通过值(这很棒) 为您提供身份,但如果您需要引用相等(出于某种原因),那么拥有常规类很有用。此外,案例类会生成大量样板代码,这些代码在需要时非常有用,但如果在任何地方使用,可能会使字节码太大。最后,隐式类和值类与普通类一样工作得很好。
  • 如果您有 Java 背景,那么类比可能会有所帮助。你会如何回答这个问题:“有什么理由在 Java 中使用非静态方法吗?”
  • 对象没有与类相同级别的支持,例如:依赖注入对对象有自己的约束stackoverflow.com/questions/37274533/inject-in-scala-object

标签: scala functional-programming


【解决方案1】:
//traits (interfaces) without implementation are perfectly valid from FP standpoint
//it's just a bag of named functions
trait A {
  def foo(s: String): Int
}

//Ok, you can implement a trait without declaring a class
object Obj extends A {
  override def foo(s: String): Int = s.length
}

//But if you want your function to be parametrized then classes are useful
//You can think of classes as partially aplied functions in FP sense 
class Clz(param: String) extends A {
  override def foo(s: String): Int = (param + s).length
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2011-04-16
    • 2011-01-08
    • 2011-07-11
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多