Scala隐式转换泛型参数
发布时间:2020-12-16 10:02:08 所属栏目:安全 来源:网络整理
导读:我有一些类似于以下的代码,其中我有一个函数,它接受List [TypeA],我希望能够用List [TypeB]调用它,其中我有一个从TypeA到TypeB的隐式转换. 我有一些示例代码,当我使用List inline调用方法时,但是如果首先将列表分配给变量,则该代码不起作用. 这里有一些有用
我有一些类似于以下的代码,其中我有一个函数,它接受List [TypeA],我希望能够用List [TypeB]调用它,其中我有一个从TypeA到TypeB的隐式转换.
我有一些示例代码,当我使用List inline调用方法时,但是如果首先将列表分配给变量,则该代码不起作用. 这里有一些有用的代码: class Person(val name: String) implicit def stringToPerson(str: String) : Person = new Person(str) def printAll(list: List[Person]) { list.foreach(person => println("Person: " + person.name)) } def callIt = { printAll(List("1","2","3")) } 不幸的是,如果callIt看起来像这样: def callIt = { val list = List("1","3") printAll(list) } 我得到了它期望List [Person]的错误但是我给了一个List [String] 在我的实际代码中,我已经在其他地方定义了列表,因此它不会最终起作用.我该怎么做才能使它从String到Person的隐式转换,为什么它在第一种情况下工作但不在第二种情况下工作? 旁注:如果我指定列表的类型并让它进行转换,它也有效: val list: List[Person] = List("1","3") 但同样,那不是我想要的. 我真的需要提供从List [String]到List [Person]的隐式转换吗? 解决方法
初始代码工作的原因是因为在printAll(List(“1”,“2”,“3”))中,编译器使用类型推断来知道在构造List之前需要Person.该行告诉编译器它需要一个List [Person]然后强制调用List()返回一个List [Person],它强制该调用的参数为Person,然后强制使用String的隐式转换对人.不幸的是,语句val list = List(“1”,“3”)没有说明需要类型列表[Person]
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 模态对话框 – Bootstrap Modal Focus无法正常工
- AngularJS路由之ui-router(四)$state.go页面跳
- scala – TransactionalMap与SynchronizedMap
- Scala:Tail Recursion和ListBuffer
- 运行angularjs项目--安装nodejs,配置项目运行环
- 如何打破源Bash脚本的功能
- 15天玩转redis —— 第四篇 哈希对象类型
- twitter-bootstrap-3 – Bootstrap“grunt watch
- 角度 – 离子服务在’build dev started’之后停
- Windows中redis的下载及安装、设置
热点阅读