快速业务通道

面向Java开发人员的Scala指南 - 包和访问修饰符 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
java.math.BigInteger,可以在 App 的定义以外的包级别导入该类,这样在包作用域内的所有类就都导入 BigInteger 了。

清单 3. 导入的作用域

package com {   package tedneward   {    package scala    {      // ...     package mathfun     {      object App      {       import java.math.BigInteger       def factorial(arg : BigInteger) : BigInteger =       {        if (arg == BigInteger.ZERO) BigInteger.ONE        else arg multiply (factorial (arg subtract BigInteger.ONE))       }       def main(args : Array[String]) : Unit =       {        if (args.length > 0)         System.out.println("factorial " + args(0) +          " = " + factorial(new BigInteger(args(0))))        else         System.out.println("factorial 0 = 1")       }      }     }    }   } }

不只如此,Scala 还不区分高层成员和嵌套成员,所以您不仅可以使用 import 将嵌套类型的成员置于词法作用域中,其他任何成员均可;例如,您可以通过导入 java.math.BigInteger 内的所有名称,使对 ZERO 和 ONE 的限定了作用域的引用缩小为清单 4 中的名称引用:

清单 4. 静态导入

package com {   package tedneward   {    package scala    {      // ...     package mathfun     {      object App      {       import java.math.BigInteger       import BigInteger._       def factorial(arg : BigInteger) : BigInteger =       {        if (arg == ZERO) ONE        else arg multiply (factorial (arg subtract ONE))       }       def main(args : Array[String]) : Unit =       {        if (args.length > 0)         System.out.println("factorial " + args(0) +          " = " + factorial(new BigInteger(args(0))))        else         System.out.println("factorial 0 = 1")       }      }     }    }   } }

面向Java开发人员的Scala指南 - 包和访问修饰符(3)

时间:2011-01-30 Ted Neward

您可以使用下划线(还记得 Scala 中的通配符吧?)有效地告知 Scala 编译器 BigInteger 内的所有成员都需要置入作用域。由于 BigInteger 已经被先前的导入语句导入到作用域中,因此无需显式地使用包名限定类名。实际上,可以将所有这些都结合到一个语句中,因为 import 可以同时导入多个目标,目标间用逗号隔开(如清单 5 所示):

清单 5. 批量导入

package com {   package tedneward   {    package scala    {      // ...     package mathfun     {      object App      {       import java.math.BigInteger, BigInteger._       def factorial(arg : BigInteger) : BigInteger =       {        if (arg == ZERO) ONE        else arg multiply (factorial (arg subtract ONE))       }       def main(args : Array[String]) : Unit =       {        if (args.length > 0)         System.out.println("factorial " + args(0) +          " = " + factorial(new BigInteger(args(0))))        else         Sys

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号