加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:视图的应用

发布时间:2020-12-16 18:55:41 所属栏目:安全 来源:网络整理
导读:这是一个简短的代码: import scala.language.implicitConversionsimplicit def str2int(str:String) = str.toIntobject Container { def addIt[A](x: A)(implicit str2int: A = Int) = 123 + x def addIt2(x: String)(implicit str2int: String = Int) = 12
这是一个简短的代码:

import scala.language.implicitConversions

implicit def str2int(str:String) = str.toInt

object Container {
  def addIt[A](x: A)(implicit str2int: A => Int) = 123 + x
  def addIt2(x: String)(implicit str2int: String => Int) = 123 + x
}

println(Container.addIt("123"));
println(Container.addIt2("123"));

两个问题:

>是“(隐式str2int:A => Int)”称为视图?当你说一个“视图”时,代码的哪个特定部分表示它?
>为什么addIt返回246而addIt2返回字符串“123123”?

关于这个主题的任何好资源也将受到高度赞赏.谢谢.

解决方法

视图意味着类型A可以被“查看”为类型B,由隐式函数A =>指定. B.所以,是的,addIt和addIt2中的隐式参数都是视图.

addIt2返回123123,因为(不幸的是)它可以调用两个对象,其中一个是String.在Scala查看应用str2int转换的可能性之前,这就开始了.如果您不想这样,您可以显式应用视图:

def addIt2(x: String)(implicit str2int: String => Int) = 123 + str2int(x)

或者你可以隐藏any2stringadd转换:

object Container {
  import Predef.{any2stringadd => _}
  def addIt2(x: String)(implicit str2int: String => Int) = 123 + x
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读