如何获得lteq<;=运算符在Scala中使用元组?
我正在尝试修复以下问题:如何获得lteq<;=运算符在Scala中使用元组?,scala,operator-overloading,tuples,partial-ordering,Scala,Operator Overloading,Tuples,Partial Ordering,我正在尝试修复以下问题: val temp1 = (3, "hello") val temp2 = (2, "abcde") temp1 <= temp2 但不是 min(temp1, temp2) 所以scala似乎没有看到我对(Int,String)元组的排序声明 我可以使用 tempPartialOrdering.lteq(temp1, temp2) 我的一些同事建议只为(Int,String)元组创建一个新类,但我发现这些解决方案并不雅观。我真的希望能够使用普通的旧版本“你的
val temp1 = (3, "hello")
val temp2 = (2, "abcde")
temp1 <= temp2
但不是
min(temp1, temp2)
所以scala似乎没有看到我对(Int,String)元组的排序声明
我可以使用
tempPartialOrdering.lteq(temp1, temp2)
我的一些同事建议只为(Int,String)元组创建一个新类,但我发现这些解决方案并不雅观。我真的希望能够使用普通的旧版本“你的同事是对的。创建一个自定义类型(aka类)。它比你认为的优雅得多。你的同事是对的。创建一个自定义类型(aka类)。它比你认为的优雅得多。试试这个:
scala> import Ordering.Implicits._
import Ordering.Implicits._
scala> (2,3) <= (1,2)
res2: Boolean = false
scala>import Ordering.Implicits_
导入Ordering.Implicits_
scala>(2,3)试试这个:
scala> import Ordering.Implicits._
import Ordering.Implicits._
scala> (2,3) <= (1,2)
res2: Boolean = false
scala>import Ordering.Implicits_
导入Ordering.Implicits_
scala>(2,3)我只想做以下几件事。你可以根据需要扩展它以获得额外的功能。它很笨重,但它可以完成任务并允许你定制订单
implicit class stringIntTuple(a: (String, Int)) extends (String, Int)(a._1,a._2) {
def <= (x: (String, Int)): Boolean = {
this._2 <= x._2
}
}
temp1 <= temp2
隐式类stringIntTuple(a:(String,Int))扩展(String,Int)(a.。_1,a._2){
def我只想做以下几点。你可以根据需要扩展它以获得额外的功能。它很笨重,但它完成了任务,并允许你定制订单
implicit class stringIntTuple(a: (String, Int)) extends (String, Int)(a._1,a._2) {
def <= (x: (String, Int)): Boolean = {
this._2 <= x._2
}
}
temp1 <= temp2
隐式类stringIntTuple(a:(String,Int))扩展(String,Int)(a.。_1,a._2){
def这也适用于my(Int,String)在我的示例中,pair——谢谢!您可能真的想要一个混合解决方案,但是,如果pair中的第二个值是最重要的值。我测试过,如果我使用上面的隐式代码并重写,以便首先计算第二个值,这是正确的。但是如果您不声明顺序,默认值将是第一个值最重要的是,这也适用于my(Int,String)在我的示例中,pair——谢谢!您可能真的想要一个混合解决方案,但是,如果pair中的第二个值是最重要的值。我测试过,如果我使用上面的隐式代码并重写,以便首先计算第二个值,这是正确的。但是如果您不声明顺序,默认值将是第一个值最重要的
implicit class stringIntTuple(a: (String, Int)) extends (String, Int)(a._1,a._2) {
def <= (x: (String, Int)): Boolean = {
this._2 <= x._2
}
}
temp1 <= temp2