下面引用compare的时候为啥加*,compare不是返回值是0和1吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下面引用compare的时候为啥加*,compare不是返回值是0和1吗?相关的知识,希望对你有一定的参考价值。

参考技术A 你这里写成*compare加重了你理解的难度,你改成*pcompare就比较明了了
这里pcompare是一个‘函数指针’,这里不是调用函数,而是传一个函数指针给Locate...函数
*是说它是函数指针类型,和返回值是啥没有啥关系追问

这俩compare没关系吗

追答

没有任何关系

为啥 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]?

【中文标题】为啥 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]?【英文标题】:Why does Scala's RichInt extends Comparable[Int] instead of Comparable[RichInt]?为什么 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]? 【发布时间】:2018-03-05 01:39:08 【问题描述】:

为什么 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]

我是 Scala 新手。在浏览 Scala 库代码时,我注意到 RichInt 类扩展了 ScalaNumberProxy[Int]ScalaNumberProxy 扩展 OrderedProxyOrderedProxy 扩展 OrderedOrdered 扩展 java.lang.Comparable。 所以我的理解是RichInt(间接)扩展了java.lang.Comparable[Int]

我的问题是它为什么不扩展 java.lang.Comparable[RichInt]

我提出这个问题的原因是在 Java 中,我会写这样的代码:

class A implements Comparable<A> 

    @Override

    public int compareTo(A other) 
        //implement the method.
    
    ....

【问题讨论】:

【参考方案1】:

首先我们需要知道RichInt 用于Int 类型提供帮助函数,由implicit conversions 在Predef 中定义:

@inline implicit def intWrapper(x: Int) = new runtime.RichInt(x)

所以你可以像这样使用它:

2.doubleValue()
2.shortValue()
...

对于您的问题:为什么不扩展 java.lang.Comparable[RichInt]

因为我们实际上是在 Int 类型上操作,而不是 RichInt 类型。喜欢:

2.compare(3)

【讨论】:

感谢您的解释。这是非常有帮助的。我还有一个问题:如果它扩展 java.lang.Comparable[RichInt] 会发生什么?感谢您的热心帮助。 如果扩展java.lang.Comparable[RichInt],这将绑定Comparable函数(compareTo)在RichInt类型。但实际上RichInt 是针对 Int 类型而不是 RichInt 类型的丰富功能。 感谢您的解释。所以我的理解是,如果RichInt extends java.lang.Comparable[RichInt]Int 类型就不是Comparable

以上是关于下面引用compare的时候为啥加*,compare不是返回值是0和1吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Comparator 应该实现 Serializable?

comparable and comparator 比较

Sass函数-comparable 判断两个数是否可进行加减合并

为啥 std::compare_three_way 不是模板结构/函子

beyond compare 比较问题

我想知道临时对象(name_compare())是按值传递还是通过引用 std::sort