Scala의 암시적 변환
10262 단어 scalafunctional
암시적 메서드와 클래스를 더 복잡한 구조로 확장하여 작동하므로 명시적으로 수행해야 하는 경우 코딩하기가 훨씬 더 어렵습니다.
암시적 변환과 그 확장을 구현하는 세 가지 방법에 대해 이야기하겠습니다.
암시적 방법
이중 값 시퀀스를 취하십시오.
Seq(0.4, 1.8, 2.2)
이 경우 짧은 목록이지만 수백 개가 될 수 있습니다. 천장 정수 값만 필요하므로 값을 변환하는 방법이 필요합니다.
암시적 방법을 사용할 수 있습니다.
implicit def double2int(value: Double): Int = value.ceil.toInt
val values: Seq[Int] = Seq(0.4, 1.8, 2.2)
values
의 값은 다음과 같습니다.Seq(1, 2, 3)
다음과 같이 확장됩니다.
def double2int(value: Double): Int = value.ceil.toInt
val values: Seq[Int] = Seq(0.4, 1.8, 2.2) map double2int
암시적 클래스
암시적 클래스는 기존 형식에 메서드를 주입하는 방법입니다.
예를 들어 XML 노드를 생성하는 문자열 메서드를 만들어 보겠습니다.
implicit class XMLString(value: String) {
def toXML: Option[NodeSeq] = Try(XML loadString value).toOption
}
val source = getDataFromOutsideSource() // : String
val node = source.toXML
다음으로 확장됩니다.
class XMLString(value: String) {
def toXML: Option[NodeSeq] = Try(XML loadString value).toOption
}
object XMLString extends (String => XMLString) {
def apply(value: String): XMLString = new XMLString(value)
}
val source: String = getDataFromOutsideSource()
val node: Option[NodeSeq] = XMLString(source).toXML
.toXML
가 호출될 때마다 새로운 XMLString
가 생성됩니다.암시적 값 클래스
Value classes은 호출할 때마다 새 인스턴스를 생성하지 않는 경량 Scala 리소스입니다. 대신 모든 값 클래스는 동반 개체를 사용하여 메서드를 감싸고 여기에서 호출합니다.
double이 정수인지 여부를 확인하는 방법인 다음 예제를 고려하십시오.
implicit class IntegralDouble(val value: Double): extends AnyVal {
def isIntegral: Boolean = value % 1 == 0
}
val value = getSomeFloatPointValue() // : Double
if (value.isIntegral)
doSomeMathWith(value)
다음으로 확장됩니다.
class IntegralDouble(val value: Double): extends AnyVal {
def isIntegral: Boolean = IntegralDouble isIntegral$expansion value
}
object IntegralDouble {
def isIntegral$expansion(value: Double): Boolean = value % 1.0 == 0.0
}
val value: Double = getSomeFloatPointValue()
if (IntegralDouble.isIntegral$expansion(value))
doSomeMathWith(value)
.isIntegral
호출 시 인스턴스가 생성되지 않습니다.참고: 값 클래스는
AnyVal
를 상속하여 태그가 지정되며 * <: AnyVal
유형의 값이 필요합니다. ) , Boolean
, Byte
및 그들의 literal-based singleton types .Kodumaro의 원본 게시물 .
Reference
이 문제에 관하여(Scala의 암시적 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cacilhas/implicit-conversions-in-scala-4dgb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)