经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
2018-02-17 中文代码示例[译]Scala中创建隐式函数
来源:cnblogs  作者:吴烜  时间:2019/3/8 9:03:16  对本文有异议

前言: 学习Scala时, 顺便翻译一下自己有兴趣的文章. 代码中所有命名都中文化了(不是翻译). 比如原文用的是甜甜圈的例子.

原文: Scala Tutorial - Learn How To Create Implicit Function

简述

本文学习如何创建隐式函数, 以便对几乎任何类型实现扩展方法或函数.

正如其名, Scala设计时就最大化了可扩展性. Scala features tutorial提到用implicit可以方便地实现任何类型的扩展方法或函数.

对之前的教程的包子铺例子, 这里扩展String类使它有最爱吃的包子()函数.

步骤

1. 创建String的封装类

我们创建一个简单的封装类, 以String为参数, 并提供这个最爱吃的包子函数

  1. println("第一步: 创建封装类以便扩展String类型")
  2. class 包子名称(名称: String) {
  3. def 最爱吃的包子: Boolean = 名称 == "香菇菜包"
  4. }

(原文, 下同)注:

看到Scala可以用==而不是equals比较字符串, Java或者.NET的开发者也许会惊喜

2. 如何创建隐式函数把String转换成封装类

把隐式函数封装到object实现的单例中是个好习惯. 也可以用之后教程中的package object实现.

下面, 就定义了一个隐式函数将String作参数并创建一个封装类的实例:

  1. println("\n第二步: 创建隐式函数把String转换为封装类")
  2. object 包子转换 {
  3. implicit def 文本到包子名称(名称: String) = new 包子名称(名称)
  4. }

注:

隐式函数与其他函数定义唯一区别就是前面有implicit关键词

3. 导入转换函数进入作用域

为了使用第二步中定义的隐式函数, 需要将它纳入作用域. 这需要import关键词:

  1. println("\n第三步: 导入转换函数进入作用域")
  2. import 包子转换._

注:

导入中使用的_通配符可以导入所有值或隐式函数

4. 建文本常量

建了两个文本常量:

  1. println("\n第四步: 建文本常量")
  2. val 菜包 = "香菇菜包"
  3. val 肉包 = "白菜肉包"

5. 如何调用自定义的最爱吃的包子

简单:

  1. println("\n第五步")
  2. println(s"爱吃菜包吗 = ${菜包.最爱吃的包子}")
  3. println(s"爱吃肉包吗 = ${肉包.最爱吃的包子}")

运行后应该得到:

  1. 第五步
  2. 爱吃菜包吗 = true
  3. 爱吃肉包吗 = false

注:

  • 最爱吃的包子像是String类自带的函数
  • 但并不用修改String类的源码
  • 而是用Scala的隐式函数来扩展了String类

本节教程结束, 希望有所帮助.

译后感

  • 翻译比想象中耗时

原文链接:http://www.cnblogs.com/program-in-chinese/p/10489396.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号