14
すべてのScala型で動作する関数を作成したいと考えています(つまり、 '<'を使用できます)。その構文は何ですか?私が思い付くした最高のは、私はREPLからそれを使用しようとすると、しかし、動作しませんOrdered [A]のサブタイプを取る関数のScala構文は何ですか?
def lessThan[T <: Ordered[T]](x: T, Y: T) = x < y
です:
基本的に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))
、私はこれと同等のものをしたいと考えていますハスケルコード:
lessThan :: (Ord a) => a -> a -> Bool
lessThan x y = x < y
私はDebianシステムでscala 2.7.3を使用しています。
私は何が欠けていますか?
暗黙的に暗黙的に明示的にパラメータにする必要がありますか? scala-runtimeが暗黙的にTをOrdered [T]に変換する方法を知っている場合、なぜ暗黙のパラメータをリストする必要がありますか?ありがとう! – shj
まず、TをOrdered [T]に変換することはできません。たとえば、順序を定義する(Int => Int)。第2に、変換が可能な場合、ランタイムは変換方法を知らない。代わりに、コンパイラは実行時に変換を行う関数を挿入する方法を知っています。 –
は最初のメソッドが廃止されたように見えます[SI-7629](https://issues.scala-lang.org/browse/SI-7629) –