scala隐式转换的用法

  介绍

本篇内容介绍了“scala隐式转换的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、简介

从类型S到类型T的隐式转换由具有函数类型S=比;T的隐式值定义,或者通过可转换为该类型的值的隐式方法来定义。隐含转换适用于两种情况:

1),如果表达式e是类型,并且年代不符合表达式的期望类型T .

2),在具有类型S的e的定位表达中,如果m不表示年代的成员

在第一种情况下,搜索适用于e并且其结果类型符合T的转换c。在第二种情况下,搜索适用于e的转换c,其结果包含名为m的成员。

列表(Int)的两个列表x和y的以下操作是合法的:

<节>
 xs  & lt;=, y 
  

前提是下面定义的隐式方法list2ordered和int2ordered在范围内:

<节>
 

<代码>隐def list2ordered[一](x:列表[A]) <代码>(隐式elem2ordered:=比;命令[A]):命令[[]]列表= <代码>新命令(列表[一]]{/* . .代码*/} <代码>
<代码>隐def int2ordered (x: Int):命令(Int)= <代码>新命令(Int) {/* . .代码*/}

  

隐式导入的对象scala.Predef声明了一些预定义的类型(例如对)和方法(例如,断言),还有一些隐式转换,例如,当调用期望java.lang.Integer的Java方法时,可以自由地传递一个scala。Int。这是因》为预定义包含以下隐式转换:

<节>
 

<代码>进口scala.language。implicitConversions <代码>
<代码>隐def int2Integer (x: Int)= <代码> java.lang.Integer.valueOf (x)

  

因为隐式转换可能有缺陷,如果不加区别地使用,编译器在编译隐式转换定义时会发出警告。

若要关闭警告,请采取以下任何一种操作:

1),将scala.language.implicitConversions导入隐式转换定义的范围

2),调用编译器时,加上:回应:implicitConversions

当编译器应用转换时,不会发出警告。

二、演示

1,第一种情况的演示

直接使用,会报错

<节>
 val 我:,Int  1.5=, 
  

定义隐式转化方法

<节>
 implicit  def  double2Int (d:双),=,d.toInt 
  

再次执行就正常了

 scala隐式转换的用法

2,第二种情况的演示

<节>
 class  MYDF {def 才能,显示(sw :字符串),=,println (sw)} object  RDD2DF {implicit 才能;def  RDD2DF (s : MYRDD),=, new  MYDF} class  MYRDDobject  AminalType  extends ,应用{import 才能;yourpackage.RDD2DF._ , val  test =, new  MYRDD , test.show (“RDD  converts  into  DF"),,,,,,,,,} 
  

编译器在执行测试对象的时候并没有显示方法,此时编译器就会在作用域范围内查找能使其编译通过的隐式视图,找到RDD2DF的隐式转换方法后,会先进行隐式转换,之后调用显示方法。

3,隐式转化参数

在定义一个方法时可以把最后一个参数列表定义为隐式参数。这个在火花内部使用也是非常广泛,比如前面发表的文章火花累加器原理,自定义累加器及陷阱就用到了。

如果方法有多个隐式参数,只需一个隐修饰即可。当调用包含隐式参数的方法是,如果当前上下文中有合适的隐式值,则编译器会自动为改组参数填充合适的值。如果没有编译器会抛出异常。当然,标记为隐式参数的我们也可以手动为该参数添加默认值。

<节>
 def  foo (n: Int) (implicit  t1:,字符串,t2:, Double =, 3.14)。
  

,少了第一步会报错。

 scala隐式转换的用法

此种情况在火花中的使用,举例:

<节>
 def 蓄电池[T] (initialValue: T,名字:,字符串)(implicit 参数:,AccumulatorParam [T]),,:,蓄电池[T],=, {val 才能;acc =, new 蓄电池(initialValue,参数,,(名字),,cleaner.foreach (_.registerAccumulatorForCleanup (acc)),, acc} 
  

三,总结

彻底搞懂scala隐式转换,对我们了解火花及火花相关产品源码,如mongodb,复述等于火花结合实现源码原理有着至关重要的作用。

scala隐式转换的用法