- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 2.10 开始,-Xlint
提示在包对象内部定义的类。但为什么?在包对象中定义一个类应该与在一个单独的包中定义具有相同名称的类完全相同,除了方便得多。
在我看来,Scala 的严重设计缺陷之一是无法将类实体(例如变量声明、函数定义)以外的任何内容放在文件的顶层。相反,您被迫将它们放入一个单独的“包对象”(通常在 package.scala
中),与它们所属的其余代码分开,并违反基本编程规则,即概念上相关的代码应该 body 上也有关系。我看不出为什么 Scala 在概念上不能在顶层允许它在较低级别允许的任何东西,并且任何非类的东西都会自动放入包对象中,这样用户就不必担心它了。
例如,在我的情况下,我有一个 util
包,在它下面我有许多子包( util.io
、 util.text
、 util.time
、 util.os
、 util.math
、 util.distances
等),它们对函数、类和有时变量的异构集合进行分组是语义相关的。我目前将所有各种函数、类等存储在 package object
中。坐在一个名为 io.scala
的文件中或 text.scala
或其他,在 util
目录。这很好用,而且非常方便,因为可以混合函数和类,例如我可以做类似的事情:
package object math {
// Coordinates on a sphere
case class SphereCoord(lat: Double, long: Double) { ... }
// great-circle distance between two points
def spheredist(a: SphereCoord, b: SphereCoord) = ...
// Area of rectangle running along latitude/longitude lines
def rectArea(topleft: SphereCoord, botright: SphereCoord) = ...
// ...
// ...
// Exact-decimal functions
class DecimalInexactError extends Exception
// Format floating point value in decimal, error if can't do exactly
formatDecimalExactly(val num: Double) = ...
// ...
// ...
}
最佳答案
But why? Defining a class inside a package object should be exactly equivalent to defining the classes inside of a separate package with the same name,
except a lot more convenient
package object mypkg {
class MyClass
}
package mypkg {
class MyClass
}
关于class - 为什么 Scala 包对象中的类不受欢迎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270003/
我是一名优秀的程序员,十分优秀!