tracks/perl6/exercises/space-age/Example.pm in trackler-2.0.8.28 vs tracks/perl6/exercises/space-age/Example.pm in trackler-2.0.8.29

- old
+ new

@@ -1,16 +1,32 @@ -our $earth_revolution = 31557600; +unit module SpaceAge:ver<1>; -our %planets = ( - mercury => 0.2408467, - venus => 0.61519726, - mars => 1.8808158, - jupiter => 11.862615, - saturn => 29.447498, - uranus => 84.016846, - neptune => 164.79132, - earth => 1, -); +role Planet { + method age-on ($seconds) { + ($seconds / self.orbital-period).round(0.01); + } +} -sub age-on( $planet, $seconds ) is export { - ( $seconds / %planets{$planet.lc} / $earth_revolution ).round(0.01); +class Earth does Planet is export { + my $.orbital-period = 31557600; +} + +my package EXPORT::DEFAULT { + my %planets = ( + :Mercury(0.2408467), + :Venus(0.61519726), + :Mars(1.8808158), + :Jupiter(11.862615), + :Saturn(29.447498), + :Uranus(84.016846), + :Neptune(164.79132), + ); + for %planets.kv -> $planet, $relative { + OUR::{$planet} := EVAL 'class :: does Planet { + my $.orbital-period = calculate-orbital-period $relative + }'; + } +} + +sub calculate-orbital-period ($relative-to-earth) { + Earth.orbital-period * $relative-to-earth; }