잠시 동안 Java로 작업 한 후에 스칼라를 처음 접했기 때문에 기본 질문 인 경우 사과드립니다. 나는 float 또는 double precision으로 실행되기를 원하는 메소드를 가지고 있으며 스칼라의 다형성을 사용하는 것이 매우 쉬울 것 같았다. 자바에서는 메소드를 오버로드하여 부동 인수를 취하고 다른 인수는 이중 인수를 취하는 것이 유일한 방법 이었지만 다형성을 사용하면이를 피할 수 있고 작동 할 수있는 한 가지 방법이있을 것이라고 기대하고 있습니다. 어느 쪽이든.다형성 메소드의 스칼라 타입 변환
def Sample[A: Numeric](x: A, y: A)(implicit num: Numeric[A]): A= {
import num._
var out = 2.0.asInstanceOf[A] * x * y
return out
}
이 배정 밀도에 대한 잘 작동하지만 ClassCastException이 결과는 내가 실행하려고하면 : 나는 지금까지 구현 한 방법은 (일반 작업이 인수 사이에 작동하게하는 방법에 대한 https://stackoverflow.com/a/4033390/6247850) 다음과 같습니다 플로트에. 이 문제를 해결할 수있는 방법이 있다고 생각하게하는 2.0.toFloat.asInstanceOf[A]
으로 변경하여 해결 방법을 하드 코드 할 수 있습니다. 그러나 하드 코드를 사용하면 일반적인 방법으로 만들지 못할 것입니다. 나는 또한이 대답 https://stackoverflow.com/a/34977463/6247850을 사용함으로써 부서가 적절하게 작동하도록하는 일의 불균형 한 양과 같이 보였던 일을해야만했고, 일을하기보다는 덜 비교하기 위해 건물을 짓았다.
필자가 원했던 것은 메서드가 실행되고 반환되어야하는 정밀도를 지정하는 기능입니다. 이 문제는 .asInstanceOf[A]
이 이미 올바른 유형이 아닌 이상 작동하지 않기 때문에 해당 메서드에 사용 된 다른 변수를 적절한 유형으로 캐스팅 할 때 발생합니다.
def Sample[A: Numeric](x: A, y: A)(implicit num: Numeric[A]): A = {
num.times(
num.fromInt(2),
num.times(x, y)
)
}
이 과부하 연산기 어떤 모호성을 해결할 수 있도록 제 :
와우, 빠른 응답에 감사드립니다! 한 번에 많은 작업을 사용할 때 더 간결하게 만들 수있는 방법이 있습니까? '2 * x * (1)에 비해'num.times (num.fromInt (2), num.times (x, num.plus (num.fromInt (1), y)))'와 같은 코드는 읽기가 어렵습니다. + y)' – user6247850
@ user6247850 실제로 네, 원래 코드 그대로입니다. 나는이 대안을 추가 할 것이다. 일반적인 경우에 대한 내 업데이 트를 참조하십시오. – laughedelic