Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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 为什么将包级别的defs/types/implicits放在文件的根级别是非法的?_Scala_Packages - Fatal编程技术网

Scala 为什么将包级别的defs/types/implicits放在文件的根级别是非法的?

Scala 为什么将包级别的defs/types/implicits放在文件的根级别是非法的?,scala,packages,Scala,Packages,自从我开始使用Scala以来,这个问题一直困扰着我。这是我的想法: Scala没有Java的要求,一切都必须在一个类中,这是一件好事 Scala有函数,即没有类/对象的方法 包是对象,因此如果在包中定义类,它将进入包对象 有些东西必须显式地放入包对象中,而有些东西没有-为什么? 我觉得不得不写这样的东西太难看了: package foo.bar object `package` { type Foo = Bar def fact(n: Int): Int = ??? } 而不仅仅是

自从我开始使用Scala以来,这个问题一直困扰着我。这是我的想法:

  • Scala没有Java的要求,一切都必须在一个类中,这是一件好事
  • Scala有函数,即没有类/对象的方法
  • 包是对象,因此如果在包中定义类,它将进入包对象
  • 有些东西必须显式地放入包对象中,而有些东西没有-为什么?
  • 我觉得不得不写这样的东西太难看了:

    package foo.bar
    
    object `package` {
      type Foo = Bar
      def fact(n: Int): Int = ???
    }
    
    而不仅仅是

    package foo.bar
    
    type Foo = Bar
    def fact(n: Int): Int = ???
    
    那么:有人知道什么时候/为什么决定使用包对象进行显式包装更好吗?我经常发现自己对晦涩难懂的
    对象包
    声明引入的额外缩进和样板文件感到恼火,这与Java中的恼人原因相同:

    class MyMath {
        public static int fact(int n) { ... }
    }
    


    不知道真正的原因,但包对象语法鼓励您将所有定义(记住,它们将在包范围内可见)保留在一个位置(而不是分散在整个代码库中)@om nom nom:但这并不完全正确:如果您愿意,您可以在同一个包中让类分散在1000个文件周围。假设我定义函数
    x
    ,我可以在类(文件)MyClass1或MyClass2或。。。或MyClassN,全部放在
    foo.bar
    包中,此函数
    x
    将在
    foo.bar
    中随处可见。。。没有地方——现在很难找到它的定义位置(是的,我知道我们有grep、IDE等等)。不要收到关于类的最后一条评论。@om nom nom:您可以从任意多个
    .scala
    文件中将类定义到
    package foo
    ;此外,没有强制执行每个文件一个类的约定,也没有强制执行文件名应与类名相同的约定,那么为什么我们突然强制将
    def
    s、
    type
    s和
    implicit
    s放在一个位置?此外,package
    foo.bar
    的package对象的“一个位置”可以是
    x123\u hello.scala
    在一个名为
    i/love/bacon
    的文件夹中,不管怎样,说到可查找性。