问题标签 [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.
ruby - 什么是 Ruby <=>(宇宙飞船)运算符?
什么是 Ruby <=>
(宇宙飞船)运算符?运算符是否由任何其他语言实现?
ruby - Ruby <=> 组合器的实现
经常有人想要<=>
在产品数据类型上实现(比较,或“宇宙飞船”)运算符,即具有多个字段的类(所有这些(我们希望!)已经<=>
实现),比较某个字段中的字段命令。
这既乏味又容易出错,尤其是对于很多领域。它很容易出错,以至于我经常觉得我应该对该函数进行单元测试,这只会增加乏味和冗长。
Haskell 提供了一种特别好的方法:
(对于那些不熟悉的人fold
,以上扩展为
它产生一个可应用于两个D
s 的函数,以产生一个Ordering
.)
的定义compareD
非常简单,显然是正确的,即使没有静态类型检查,我也不觉得需要对其进行单元测试。
实际上,这个问题可能比这更有趣,因为我可能不想只使用标准<=>
运算符,而是在不同的时间以不同的方式排序,例如:
所以,问题:
- 在 Ruby 中实现这类事情的典型方法是什么?
- 仅使用标准库中定义的内容最好的方法是什么?
- 相比之下,与上面的 Haskell 代码有多接近,它的可靠性如何?如有必要,如何确保字段具有正确实施的
<=>
or<
和>
运算符?
顺便说一句,虽然这是一个 Ruby 问题,但如果该站点的长辈们同意,我很高兴考虑讨论有关 Haskell 技术的主题。请随时评论这是否合适,如果合适,请将此帖子标记为“haskell”。
perl - 宇宙飞船运算符何时在排序之外使用?
我只见过数字排序例程中使用的 Perl 宇宙飞船运算符 (<=>)。但它在其他情况下似乎很有用。我只是想不出实际用途。
什么时候可以在 Perl 排序之外使用它的例子是什么?
这是一个最佳实践问题。
c++ - 与三值比较函数相比,仅使用小于运算符进行排序
在 C++/STL 中,排序仅通过使用小于运算符来完成。虽然我不知道排序算法是如何实际实现的,但我假设其他操作是隐式创建的:
与使用三值 * 比较函数(例如 Java)相比,这对性能有好处吗?或者为什么做出这个设计决定?
我的假设是任何三值比较函数仍然必须自己实现这些比较,从而获得相同的性能。
**通过三值比较函数,我的意思是一个比较函数,它返回 -1、0 和 1 表示小于、等于和高于*
更新: C++20 中
似乎有一个宇宙飞船<=>
操作符,所以显然委员会认为只使用operator<
.
ruby-on-rails - 覆盖 Ruby 的宇宙飞船运算符 <=>
我试图重写 Ruby 的 <=> (宇宙飞船)运算符来对苹果和橙子进行排序,以便苹果首先按重量排序,橙子其次,按甜度排序。像这样:
但这不起作用,有人可以告诉我在这里做错了什么,或者更好的方法吗?
ruby - 对 Ruby 的 <=> 运算符感到困惑
我对 Ruby 的 <=> 运算符感到困惑。它与 == 或 === 有何不同?任何全面的示例/用例?谢谢。
ruby-on-rails - Ruby中的'<==>'是什么意思?
Ruby中的'<==>'是什么意思?
示例:代码来自以下比较格式中的数字的类x.x.x
,
以下代码来自此类订购数字,例如x.x.x
,
ruby - 为什么飞船操作员里面只有一个等号?
为什么<=>
选择宇宙飞船操作员有一个等号而不是两个?这是否被视为与一个等号通常意味着分配和两个意义比较不一致?
ruby - Ruby 中 <=> 和 == 的区别?
他们有什么区别?来自 Java 背景,在我看来,<=> 与 Java 的 equals() 相同,而 == 用于直接引用比较。这是正确的吗?
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
吗?