nog meer roman numerals
Oh, we willen natuurlijk ook de andere kant op kunnen! Voeg het volgende toe aan de uitgebreide Fixnum
:
class Fixnum
…
@@ROMAN_HASH = Hash[*@@ROMAN_DIGITS.map{|a,b|[b,a]}.flatten] def self.from_roman(txt) result, last = 0, 0 txt.upcase.reverse.each_byte do |c| n = @@ROMAN_HASH[c.chr] or raise "'#{c.chr}' is not a valid roman digit" result += n < last ? -n : n last = n end result end end
En nu kan je met Fixnum.from_roman('MCMLXXII')
weer terug naar 1972
!
Kan mooier.
Waarom niet de String class hacken zodat je kunt zeggen:
'MCMLXXII'.from_roman()
? Sowieso is de methodnaamto_roman
hier niet helemaal terecht, je converteert immers van roman naar een normaal getal?blog.dannynet.net
Ach daar moet natuurlijk
Fixnum.from_roman('MCMLXXII')
staan ipvFixnum.to_roman('MCMLXXII')
. De code klopt alleen m’n enthousiasme daarna spoort niet.De String class molesteren kan natuurlijk ook:
'MCMLXXII'.to_i
geeft nu1972
!