14
모든 스칼라 유형에서 작동하는 함수를 전체 정렬로 쓰고 싶습니다. 즉, '<'을 사용할 수 있습니다. 그 문법은 무엇입니까? 기본적으로Ordered [A]의 하위 유형을 취하는 함수의 스칼라 구문은 무엇입니까?
scala> lessThan(1, 2)
<console>:8: error: inferred type arguments [Int] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(1, 2)
^
scala> import runtime._
import runtime._
scala> lessThan(new RichInt(1), new RichInt(2))
<console>:8: error: inferred type arguments [scala.runtime.RichInt] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(new RichInt(1), new RichInt(2))
, 나는이 동등한를 원하는 생각 : 내가 함께 왔어요 가장 좋은 내가 REPL에서 그것을 사용하려고 할 때,하지만 작동하지 않습니다
def lessThan[T <: Ordered[T]](x: T, Y: T) = x < y
입니다 하스켈 코드 :
lessThan :: (Ord a) => a -> a -> Bool
lessThan x y = x < y
데비안 시스템에서는 scala 2.7.3을 사용하고 있습니다.
무엇이 누락 되었습니까?
암시 적으로 암시 적으로 명시 적으로 매개 변수로 가져와야하는 이유는 무엇입니까? scala-runtime이 T를 암시 적으로 Ordered [T]로 변환하는 방법을 알고있는 경우 암시 적 매개 변수를 나열해야하는 이유는 무엇입니까? 감사! – shj
먼저 T를 Ordered [T]로 변환 할 수 없습니다. 예를 들어, 순서를 정의하십시오 (Int => Int). 둘째, 변환이 가능한 경우 런타임은 변환 방법을 알지 못합니다. 대신 컴파일러는 런타임에 변환을 수행하는 함수를 삽입하는 방법을 알고 있습니다. –
첫 번째 메소드가 더 이상 사용되지 않는 것처럼 보입니다. [SI-7629] (https://issues.scala-lang.org/browse/SI-7629) –