9
votes

Quand l'opérateur du vaisseau spatial est-il utilisé en dehors d'une sorte?

Je n'ai vu que l'opérateur de spatinage Perl (<=>) utilisé dans les routines de tri numériques. Mais cela semble utile dans d'autres situations. Je ne peux tout simplement pas penser à une utilisation pratique.

Quel serait un exemple de quand il pourrait être utilisé en dehors d'un tri perl?

Ceci est une question de meilleure pratique.


1 commentaires

@ETher: Seulement l'étiquette "opérateur"? Je pensais que vous avez aimé créer de nouveaux tags de l'opérateur!


3 Réponses :


2
votes

dans n'importe quelle méthode de comparaison. Par exemple, vous pouvez avoir un objet compliqué, mais il a toujours un "ordre" défini, vous pouvez donc définir une fonction de comparaison pour elle (que vous ne avez pas em> à utiliser dans une méthode de tri, Bien que ce soit pratique):

use List::Util qw(sum);
# $result will be
#   -1 if value is lower than the median of @setOfValues,
#    1 if value is higher than the median of @setOfValues,
#    0 if value is equal to the median
my $result = sum(map { $value <=> $_ } @setOfValues);


1 commentaires

En fait, le comportement Undef peut causer des problèmes, car undef dans une sorte entraînera la mort de Perl. Mais nous pouvons faire un tri numérique qui gère Nan's: sous numérique {$ A <=> $ B // ($ A == $ a) - ($ b == $ b)} ceci Trier les Nan au début, qui a l'effet positif du moins ne meurt pas.



7
votes

J'écris un système de contrôle pour Robot Joe qui veut aller à Robot Mary et la recharger. Ils se déplacent le long des points entier sur la ligne. Joe commence à $ J et peut marcher 1 mètre dans n'importe quelle direction par unité de temps. Mary se tient toujours à $ M et ne peut pas bouger - elle a besoin d'une bonne recharge! Le programme de contrôle ressemblerait à ce que: xxx


0 commentaires

5
votes

3 commentaires

Étant donné à quel point il est étonnamment difficile, c'est de correctement mettre en œuvre une recherche binaire, je ne peux qu'espérer que je n'ai pas contribué à un autre exemple brisé au monde. : P


Quel est l'intérêt de la performance de la délégation de ces deux comparaisons d'énoncés explicitement écrits aux préprocessionnaires internes?


Au niveau de la bytecode, il y a un opérateur, pas deux: perl -mo = TERSE -E "$ A <=> $ b" qui dit, car Perl est implémenté dans C (qui n'a pas de Opérateur de comparaison à trois voies) Le <=> doit être implémenté comme deux comparaisons par les internes. Toute prestation de performance serait que l'expansion se produit dans C plutôt que de Perl. Bien entendu, finalement, la limite est ce que l'instruction du processeur prend en charge indépendamment de ce que les opérateurs C a.