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

Scala和C#中的隐式转换

发布时间:2020-12-16 18:23:48 所属栏目:安全 来源:网络整理
导读:隐式转换似乎是 Scala的一个主要且有争议的特性,而它们似乎在C#中的突出程度要小得多.它们在两种语言中有什么区别?是否有任何地方我被迫在Scala中使用implicits,或者我是否总是可以选择是否要像C#中那样隐式或显式转换?通常在C#中,我喜欢明确地进行转换,以
隐式转换似乎是 Scala的一个主要且有争议的特性,而它们似乎在C#中的突出程度要小得多.它们在两种语言中有什么区别?是否有任何地方我被迫在Scala中使用implicits,或者我是否总是可以选择是否要像C#中那样隐式或显式转换?通常在C#中,我喜欢明确地进行转换,以便维护程序员意图的类型检查,即使消费者是我自己.

我是否正确地说C#或Scala都不能隐式拆分或组合方法/函数参数?在def myMethod(v1:Int,v2:Int)中不接受Tuple2 [Int,Int]作为其参数列表,def yourMethod(v1:Tuple2 [Int,Int])将不接受两个整数作为其参数列表.据推测,语言设计者必须考虑隐式/显式参数分割/组合.当使用多个但相似的图形库的点结构时,我确实发现这个特性是可取的.

解决方法

major and controversial feature

我在某种程度上错过了争议,所以我怀疑它是一个主要的争议.

可以使用隐式转换,但Scala开发人员通常不赞成这些转换,具体取决于具体细节.

当存在隐式转换以通过“扩展”类向类型添加方法时,它就被接受了.此扩展类不是用作参数,定义或变量的类型的类型,也不是其自身返回的类型,而是适用的原始类型.

当隐式转换在程序中通常使用的两种类型之间转换时,它被认为是一件坏事.实际上,Scala 2.10会出现针对此类用法的警告.

可以在两个可用于在Java和Scala集合之间转换的包中清楚地看到这种区别:scala.collection.JavaConversions和scala.collection.JavaConverters.后者的存在恰恰是因为前者使用的隐式转换方式被认为是坏的.

Scala允许您在特定范围内进行隐式转换,但我很少看到它被使用.另一方面,标志-Xlog-implicit-conversions允许您跟踪隐式转换发生的位置.

Scala中的默认范围中没有很多隐式类型转换.字符串可以看作是Seq [Char],而“原始”数字类型有类型扩展 – 也就是说,较小的类型可以看作是较大的类型.可能还有其他我现在还不记得的,但是,一般来说,您必须导入隐式转换才能使用它.

(编辑:李大同)

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

    推荐文章
      热点阅读