首页 > 代码库 > scala 高级十八 scala隐式方法,隐式参数的实现和使用
scala 高级十八 scala隐式方法,隐式参数的实现和使用
摘要:
通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码。
使用方式:
1.将方法或变量标记为implicit
2.将方法的参数列表标记为implicit
3.将类标记为implicit
隐式方法:
package smart.iotimport java.io.Fileimport scala.io.Sourceclass concealFunc(f:File) { def GetTxt=Source.fromFile(f.getPath).mkString def SayHello=println("hello world!")}//隐式转换object Context{ implicit def file(f:File)=new concealFunc(f)}object concealFunc{ def main(args: Array[String]): Unit = { //引用上面定义的隐士方法 import Context._ var txt=new File("d:/218/a.txt") //实现隐式转换的方法,扩展了 File 的功能 println(txt.GetTxt) txt.SayHello } }
隐式参数,自动推断参数类型
object genericvar
{
//隐式参数
def syaHello(msg:String)(implicit name:String)=println(msg+name)
//隐式参数之 扩中 类型
def min[T](x:T,y:T)(implicit s:T=>Ordered[T])=if(x<y) x else y
}
object gener
{
implicit var name:String="james"
}
object generic
{
def main(args: Array[String]): Unit = {
import gener._
genericvar.syaHello("hello")
var value=http://www.mamicode.com/genericvar.min(1, 2)
println(value)
}
result:
hello james
1
隐式类的实现
package smart.iotclass implicitClass { def smat=println("smat steps")}object common{ implicit class extendsclass(obj:implicitClass) { def func1=println("test A") def func2=println("test B") }}object implicitClass{ def main(args: Array[String]): Unit = { import common._ var imp=new implicitClass; imp.smat; imp.func1 imp.func2 }}
scala 高级十八 scala隐式方法,隐式参数的实现和使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。