È noto come verruca .
Da un commento sul post originale su Stack Overflow,
To be clear, this is not desired behavior, although there are good (historical) reasons for it. We (numpy devs) have preliminary plans to deprecate it in a future release, and provide easier to understand functionality that works as you might expect. See http://github.com/numpy/numpy/pull/6256 for more details. -- Stephan
Ogni decisione di progettazione è un compromesso da qualche parte . Crea qualcosa di più semplice da qualche parte, e da qualche altra parte qualcosa potrebbe diventare più complicato.
Considera questo bit di JavaScript:
>>> '5' + 3 - 3
50
>>> '5' - 3 + 3
5
È un bug? No. È il comportamento desiderato ... eh ... Non voglio dire che le persone vogliono farlo funzionare in quel modo, ma questo è ciò che ottieni con 'questo è come è stato deciso +
funziona. '
O in ruby che x?2:3
è un errore di sintassi (deve essere x ?2:3
- notare lo spazio). Perché? Poiché è stato deciso che le funzioni potrebbero terminare in un ?
e quindi x?2:3
è ambiguo, uno spazio tra la variabile e la parte ?
dell'espressione ternaria risolve il problema.
Oppure in PhP la decisione di imitare la funzione auto-increment di Perl su Le stringhe, ma prive della restrizione sul modello, portano a:
$foo = "3d8";
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
( ideone )
stampa:
3d8
3d9
3e0
4
E senza troppe difficoltà si potrebbe probabilmente trovare esempi di verruche di progettazione in librerie e linguaggi attraverso l'intero spettro di software che è stato realizzato non intenzionalmente con comportamento non intenzionale e forse indesiderato ma comunque atteso .
C'erano effettivamente (debabilmente) buone ragioni storiche le decisioni di progettazione per farlo funzionare in un certo modo. E il codice funziona in questo modo - non è un bug, funziona esattamente come previsto. Con il senno di poi, forse quelle decisioni non erano buone e portano a comportamenti indesiderati, ma il codice funziona come previsto - non c'è un bug lì, è una verruca.
Mentre ho elencato alcune verruche che posso mostrare e solleticare rapidamente, ci sono innumerevoli là fuori. Non ho davvero bisogno di più esempi. Sarei francamente sorpreso se si trovasse una lingua o una libreria che non contenesse una verruca.