2013-05-23 14 views
17

C'è un metodo in Ruby che fa l'opposto String#succ?Qual è il contrario di string.next?

Se si esegue succ o next si ottiene questo:

a = "4.4.10" 
a.succ 
=> "4.4.11" 

voglio il contrario:

a = "4.4.10" 
a.previous 
=> "4.4.09" 

è possibile? Ho avuto difficoltà a trovarlo nei documenti di Ruby. Forse non esiste?

+0

Non ne so nemmeno uno. Ma non dovrebbe essere troppo difficile per implementare il tuo. –

+0

Ho pensato che fosse il caso. Hai qualche buon suggerimento su un approccio per scriverlo? –

+1

Dividi su punti, seleziona l'ultimo segmento, esegui il cast su int, decrementa, assembla la stringa indietro. E ', come, 3 linee di codice :) –

risposta

32

prev o qualcosa di simile non è nel API standard perché succ e hypoethetical prev sono surjective. Nonostante ciò, "Implement Ruby String Class Prev/Pred/Prev!/Pred! - Opposite Of Next/Succ Methods" è una versione possibile che è possibile utilizzare.

Il problema principale è che succ non è inversibile. Ciò significa che, una volta applicato succ, lo prev finirebbe con qualche ambiguità.

surjective map of succ and prev

+4

Meraviglioso! Grazie mille. Dovrò dargli un colpo e vedere come funziona! –

+0

Mi stavo chiedendo su questo, e questo è un eccellente spiegazione del perché .PREV sarebbe molto difficile da attuare o prevedere se fosse un metodo effettivo. – Shem