问题标签 [spaceship-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
118424 浏览

ruby - 什么是 Ruby <=>(宇宙飞船)运算符?

什么是 Ruby <=>(宇宙飞船)运算符?运算符是否由任何其他语言实现?

0 投票
4 回答
1127 浏览

ruby - Ruby <=> 组合器的实现

经常有人想要<=>在产品数据类型上实现(比较,或“宇宙飞船”)运算符,即具有多个字段的类(所有这些(我们希望!)已经<=>实现),比较某个字段中的字段命令。

这既乏味又容易出错,尤其是对于很多领域。它很容易出错,以至于我经常觉得我应该对该函数进行单元测试,这只会增加乏味和冗长。

Haskell 提供了一种特别好的方法:

(对于那些不熟悉的人fold,以上扩展为

它产生一个可应用于两个Ds 的函数,以产生一个Ordering.)

的定义compareD非常简单,显然是正确的,即使没有静态类型检查,我也不觉得需要对其进行单元测试。

实际上,这个问题可能比这更有趣,因为我可能不想只使用标准<=>运算符,而是在不同的时间以不同的方式排序,例如:

所以,问题:

  1. 在 Ruby 中实现这类事情的典型方法是什么?
  2. 仅使用标准库中定义的内容最好的方法是什么?
  3. 相比之下,与上面的 Haskell 代码有多接近,它的可靠性如何?如有必要,如何确保字段具有正确实施的<=>or<>运算符?

顺便说一句,虽然这是一个 Ruby 问题,但如果该站点的长辈们同意,我很高兴考虑讨论有关 Haskell 技术的主题。请随时评论这是否合适,如果合适,请将此帖子标记为“haskell”。

0 投票
3 回答
2590 浏览

perl - 宇宙飞船运算符何时在排序之外使用?

我只见过数字排序例程中使用的 Perl 宇宙飞船运算符 (<=>)。但它在其他情况下似乎很有用。我只是想不出实际用途。

什么时候可以在 Perl 排序之外使用它的例子是什么?

这是一个最佳实践问题。

0 投票
3 回答
3158 浏览

c++ - 与三值比较函数相比,仅使用小于运算符进行排序

在 C++/STL 中,排序仅通过使用小于运算符来完成。虽然我不知道排序算法是如何实际实现的,但我假设其他操作是隐式创建的:

与使用三值 * 比较函数(例如 Java)相比,这对性能有好处吗?或者为什么做出这个设计决定?

我的假设是任何三值比较函数仍然必须自己实现这些比较,从而获得相同的性能。

**通过三值比较函数,我的意思是一个比较函数,它返回 -1、0 和 1 表示小于、等于和高于*

更新: C++20 中 似乎有一个宇宙飞船<=>操作符,所以显然委员会认为只使用operator<.

0 投票
2 回答
6236 浏览

ruby-on-rails - 覆盖 Ruby 的宇宙飞船运算符 <=>

我试图重写 Ruby 的 <=> (宇宙飞船)运算符来对苹果和橙子进行排序,以便苹果首先按重量排序,橙子其次,按甜度排序。像这样:

但这不起作用,有人可以告诉我在这里做错了什么,或者更好的方法吗?

0 投票
3 回答
7284 浏览

ruby - 对 Ruby 的 <=> 运算符感到困惑

我对 Ruby 的 <=> 运算符感到困惑。它与 == 或 === 有何不同?任何全面的示例/用例?谢谢。

0 投票
2 回答
1036 浏览

ruby-on-rails - Ruby中的'<==>'是什么意思?

Ruby中的'<==>'是什么意思?

示例:代码来自以下比较格式中的数字的类x.x.x

以下代码来自此类订购数字,例如x.x.x

0 投票
2 回答
530 浏览

ruby - 为什么飞船操作员里面只有一个等号?

为什么<=>选择宇宙飞船操作员有一个等号而不是两个?这是否被视为与一个等号通常意味着分配和两个意义比较不一致?

0 投票
3 回答
193 浏览

ruby - Ruby 中 <=> 和 == 的区别?

他们有什么区别?来自 Java 背景,在我看来,<=> 与 Java 的 equals() 相同,而 == 用于直接引用比较。这是正确的吗?

0 投票
4 回答
2889 浏览

ruby - 为什么排序或宇宙飞船(飞碟)运算符(<=>)不能在 Ruby 中处理布尔值?

在“ Is it possible to sort a list of objects based on if the individual object's response to a method? ”中,我发现飞碟不适用于布尔值。

考虑:

红宝石 1.8.7:

红宝石 1.9.3:

它可能与 true 和 false 没有规范的排序顺序有关,因为哪个先出现?但是,这对我来说听起来很弱。

这是一个错误sort吗?