[SCALA] 평등에 대한 스칼라 함수 값을 비교하는 방법
SCALA평등에 대한 스칼라 함수 값을 비교하는 방법
당신은 어떻게 평등이 개 스칼라 함수 값을 비교할 수 있습니다. 유스 케이스는 내가 목록에 중복 포함 할 수있는 기능의 목록을 가지고 있고 한 번만 각 기능을 수행 할 것입니다.
만약 내가 가지고 있다면:
scala> object A {
| def a {}
| }
defined module A
scala> val f1 = A.a _
f1: () => Unit = <function0>
scala> val f2 = A.a _
f2: () => Unit = <function0>
나도 == 또는 EQ와 기능을 비교하려고하면, 나는 두 경우 모두 거짓 얻을 것이다 :
scala> f1 == f2
res0: Boolean = false
scala> f1 eq f2
res1: Boolean = false
해결법
-
==============================
1.짧은 답변 : 그것은 불가능합니다.
짧은 답변 : 그것은 불가능합니다.
긴 대답 : 당신은 보장하지만 그 "동일한"기능이 acutally 같은 개체임을 기능 공장의 어떤 종류를 가질 수있다. 응용 프로그램의 아키텍처에 따라, 그것은 가능하지만하지 않을 수 있습니다.
-
==============================
2.나는 정도 김의 대답에 조금 원하는 함수 값의 제한 비교를 달성하는 방법의 예를 제공합니다.
나는 정도 김의 대답에 조금 원하는 함수 값의 제한 비교를 달성하는 방법의 예를 제공합니다.
당신이 당신의 기능을 설명하는 정의의 어떤 종류가있는 경우,이 기술에 대한 평등을 확인하는 것이 가능하다. 예를 들어, 다음과 같은 방법으로 간단한 산술 함수의 클래스 (아닌 OO 클래스)를 정의 할 수 있습니다 :
sealed trait ArthFun extends (Double => Double) case class Mult(x: Double) extends ArthFun {def apply(y: Double) = x * y} case class Add(x: Double) extends ArthFun {def apply(y: Double) = x + y}
ArthFun가 그 클래스와 회원들에 의해 정의되는이 설정, 사용하면 경우 클래스에 의해 정의 된대로 단순히 객체 평등에 의해 ArthFun 유형의 값의 평등을 확인할 수 있습니다.
scala> trait ArthFun extends (Double => Double) defined trait ArthFun scala> case class Mult(y: Double) extends ArthFun { def apply(x: Double) = x * y; override def toString = "*" + y} defined class Mult scala> case class Add(y: Double) extends ArthFun { def apply(x: Double) = x + y; override def toString = "+" + y } defined class Add scala> Seq(Mult(5),Mult(4),Add(4),Add(3),Mult(5)).distinct res4: Seq[Product with ArthFun with Serializable] = List(*5.0, *4.0, +4.0, +3.0)
from https://stackoverflow.com/questions/12725257/how-to-compare-scala-function-values-for-equality by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라의 일반 형식 유추 (0) | 2019.11.24 |
---|---|
[SCALA] 스칼라에서 어떻게 자바에서 정의 된 클래스의 동반자 객체를 정의 할 수 있습니다? (0) | 2019.11.24 |
[SCALA] 스칼라 '데프 foo는 = {1}'대 '데프 foo는 {1}' (0) | 2019.11.24 |
[SCALA] 수비력 foo는 [A, B] (XS : (A, B) *) : 어떻게 데프 foo는 사이에 [A] (A * XS)를 구별 할 수 있습니까? (0) | 2019.11.24 |
[SCALA] 스칼라 : 왜 단위로 지능을 변환 할 수 있습니까? (0) | 2019.11.23 |