首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义Scala包对象?

如何定义Scala包对象?
EN

Stack Overflow用户
提问于 2012-09-28 01:44:48
回答 1查看 916关注 0票数 1

http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html提供了以下示例:

代码语言:javascript
复制
// in file gardening/fruits/package.scala
package gardening
package object fruits {
  val planted = List(apple, plum, banana)               
  def showFruit(fruit: Fruit) {
    println(fruit.name +"s are "+ fruit.color)
  }
}

但是http://www.scala-lang.org/docu/files/packageobjects/packageobjects_1.html有:

代码语言:javascript
复制
package gardening.fruits
object `package` { ... }

由于后一个示例将文件名与对象名相匹配,并且在为其定义包对象的包中有文件,因此它看起来更可取。有什么不同(除了风格)吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-28 02:32:21

规范9.3规定:

的标准命名约定是将上面的定义放在一个名为package.scala的文件中,该文件位于与包p对应的目录中。

这意味着带反引号的形式不是标准约定。

我同意没有足够的用户指南,特别是在编译时交互方面。

不同的是,您不能命名默认的包。

代码语言:javascript
复制
object `package` {
  def f() = println("Hi")
}

object Foo extends App {
  f()
}

编辑:我更喜欢避免使用反标记(因为使用Tab键或esc键有很高的风险),但我只是有一个用例,我确实希望将代码放在一个源文件中,但我也更喜欢避免包嵌套或相对打包,因此使用反标记:

代码语言:javascript
复制
package com.github.maqicode.deprecator

object `package` {
  // crashes scalac, actually
  implicit class MaybeInt(val s: String) extends AnyVal {
    def toInt_? : Option[Int] = if (s.isEmpty) None else convert
    private def convert = try { Some(Integer.parseInt(s)) 
    } catch { case _: NumberFormatException => None }
  }
}

// lots of code, so avoid package deprecator { ... }

case class Version(major: Int, minor: Option[Int], point: Option[Int], descriptor: String)

object Version {
  val version = """(\d+)(?:\.(\d+))?(?:\.(\d+))?(.*)""".r
  def apply(descriptor: String): Version = {
    val version(major, minor, point, rest) = descriptor
    Version(major.toInt, minor.toInt_?, point.toInt_?, descriptor)
  }
}

至于隐含的问题,谁曾经使用过Scala中的默认包:我在测试代码中看到了它。

你说的是“风格之外的”吗?嘿,这都是关于风格的。

就我个人而言,我觉得倒计时很时髦,但却晦涩难懂。如果我每天多抓十次头,到了年底,我就会掉几根头发。

哦,如果我挠了挠下巴,然后发出“嗯”的声音,我就不用刮胡子了,那就好了。

这不是coursera的问题之一,对吧?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12627179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档