【发布时间】:2015-10-17 15:08:19
【问题描述】:
我是 scala 的新手。我正在查看一些代码并想出了一个导入 com.infinite.usermanagement.controllers.{ SecurityService => BaseSecurityService } 包的代码。我想知道 => 符号在导入中的含义。
【问题讨论】:
我是 scala 的新手。我正在查看一些代码并想出了一个导入 com.infinite.usermanagement.controllers.{ SecurityService => BaseSecurityService } 包的代码。我想知道 => 符号在导入中的含义。
【问题讨论】:
这行意味着你导入类SecurityService 并将其重命名为BaseSecurityService。您可以使用它来防止名称冲突等。您可以通过使用 BaseSecurityService 而不是原始类名来使用此类。
一个非常常见的例子如下(防止混淆 Scala 和 Java 类):
import java.util.{Map => JMap, List => JList}
【讨论】:
正如其他人所提到的,这是一个导入重命名。然而,在某些情况下,我想强调另一个功能非常有用:如果您“重命名”为 _,则不再导入该符号。
这在少数情况下很有用。最简单的方法是您想从两个包中导入通配符,但两个包中都定义了一个名称,而您只对其中一个包感兴趣:
import java.io.{ File=>_, _ }
import somelibrary._
现在,当您引用 File 时,它会明确地使用 somelibrary.File 而无需完全限定它。
在这种情况下,您也可以将 java.io.File 重命名为另一个名称以使其不碍事,但有时您真的不希望名称可见。包含隐式的包就是这种情况。如果您不想要特定的隐式转换(例如,如果您希望出现编译错误),那么您必须完全删除它的名称:
import somelibrary.{RichFile => _, _}
// Files now won't become surprise RichFiles
【讨论】:
_ 除了它实际上删除了名称而不是重命名它。第二个是通配符导入。恐怕 Scala 确实重载了 _ 很多。