스칼라 암시 적 변환과 암시 적 호출

// 암시 적 변환 / **

  1. 스칼라 암시 적 변환은, 실제로, 코어 암시 적 변환 기능, 즉 암시 적 변환 함수를 정의한다. *
  2. 프로그램 암시 적 변환 기능의 매우 유연 정의를 만들만큼 프로그램의 도입으로, 스칼라가 자동으로 사용됩니다 가능하며, 프로그래밍을 단순화 할 수 있습니다뿐만 아니라. *
  3. 키워드 암시 적 변환 수정 기능 implict의 *의 implict 키워드가 암시 적 변환 함수를 호출입니다 *
  4. 암시 적 변환 형식 Terget 명명 스타일 source2Terget 소스 입력 형식 당신은 * 싶어
  5. 사용자가 수동으로 자동 스칼라를 호출 은자 함수를 호출 할 필요는 없습니다.
 package scaladay02.com.aura
object ImplicitConversion {
  def main(args: Array[String]): Unit = {
//定义隐式转换将String类型的参数转为Int类型
    implicit def str2Int(str:String):Int=str.length
    val str:Int="abcdaa"
    println(str)
//将peopel进行隐式转换为int类型
    implicit def person2Int(person:People01):Int=person.getAge
   //在此处是用来隐式调用自动调用定义的隐式转换方法
    val p:Int=new People01()
println(p)
  }
}
class People01{
  //封装属性
  private var name:String=_
  private var age:Int=10
  def setName(n:String)={
    name=n
  }
  def getName()=name
  def setAge(a:Int)= {
    age = a
  }
  def getAge=age
}

스칼라 암시 적 변환 사용자 정의 API

package scaladay02.com.aura

import java.io.File

import scala.io.Source

/**使用隐式转换丰富现有API
  * 当现有的API无法满足我们得需求时我们可以用隐式转换定义我们需要的API
  * 也就是用隐式转换来丰富现有的API
  */

object AddAPI {
  def main(args: Array[String]): Unit = {
    class RichFile(file:File){
      //定义文件的读取
      def read={
        Source.fromFile(file).mkString
      }

    }
    //定义隐式转换
  implicit  def file2RichFile(file:File):RichFile=new RichFile(file)
  //创建对象传入文件路径
    val file=new File("data/data.log")
    //自动调用隐式转换
    println(file.read)
  }
}

암시 적 변환 참조

// 암시 적 변환 참조가
/
* 클래스에 대한 암시 적 참조 변환 및 일반 기준은 수입 키워드에 의해 이루어집니다

  • 그것에 자신의 액세스 범위에 암시 적 변환 기능이 자동으로 적용 할 수있는 한
  • 본 클래스 정의에 암시 적 변환의 전방만큼 스캔 할 수있는 경우에
    / *
package scaladay02.com.aura
import java.io.File
import scaladay02.com.aura.AddAPI._
object Quote {
  def main(args: Array[String]): Unit = {
val file=new File("data/data.log")
 println(file.read)
  }
}

암시 적 매개 변수

*** 암시 적 매개 변수

  • 이 함수의 내재 된 정의 또는 수정 처리 파라미터를 가리킨다
  • 이 시점에서 스칼라 수정 암시와 객체의 특정 유형을 찾기 위해 노력할 것입니다
  • 즉, 주입 및 내재적의 매개 변수 값
  • 스칼라는 현재 범위가이 개 범위에 발 또는 VAR 볼 수 있습니다 찾을 수 있습니다
  • 파라미터 값 내에서 암시 적 암시 첨부 된 개체 인
package scaladay02.com.aura
object ImplicitParameters {
  def main(args: Array[String]): Unit = {
    val list = List(6, 3, 6, 2, 63, 552, 2, 2)
    list.sorted.foreach(println)
  }

  def implicitPar: Unit ={
    //定义集合
    val list = List (new People02 ("王敏", 12),
    new People02 ("王明", 10),
    new People02 ("张琴", 20),
    new People02 ("莉莉", 22) )
//定义隐式参数
    implicit val order = new Ordering[People02] () {
    override def compare (x: People02, y: People02): Int = {
  //定义隐式参数的比较条件
    y.age.compareTo (x.age)
  }

  }
    //相同类型的隐式转换参数,在可访问的作用域内不可重复,否则冲突
    /*implicit val order2 = new Ordering[Person]() {
        override def compare(x: Person, y: Person) = {
            y.name.compareTo(x.name)
        }
    }*/
list.sorted.foreach(println)
  }

}

//方法的定义
class People02{

  var name:String=_
   var age:Int=_
   def this(name:String,age:Int){
     this()
     this.age=age
     this.name=name
   }
}

추천

출처blog.csdn.net/weixin_44701192/article/details/92109007