M
mouse_059
greetings Rubyists,
Still trying to wrap my head around metaprogramming.
def analyze(args)
# stuff
# total is defined up here and is equal to some amount of seconds
elapsed (say 100,000)
day, hour, min = 0, 0, 0
loop do day += 1; total -= 86400; break if total < 0; end; day -= 1;
total += 86400
loop do hour += 1; total -= 3600; break if total < 0; end; hour -=
1; total += 3600
loop do min += 1; total -= 60; break if total < 0; end; min -= 1;
total += 60
puts "your total is #{day} days, #{hour} hours, #{min} mins,
#{total} secs"
end
as you can see, i'd like to refactor that so i just have to
dotime( :day, 86400 )
dotime( :hour, 3600 )
dotime( :min, 60 ) (i can hardcode 'total' in the
function, doesn't matter?)
But no eval I use works, either the eval isn't defined for my class
(assume main:Object) or I get "no method for + (nilpointer). I read
about how you shouldn't use string eval, etc. A simple pointer to
some help would be awesome! Thanks guys.
PS, if a time function does this, don't spoil the metaprogramming for
me? I'd like to learn anyway.
-Mike
Still trying to wrap my head around metaprogramming.
def analyze(args)
# stuff
# total is defined up here and is equal to some amount of seconds
elapsed (say 100,000)
day, hour, min = 0, 0, 0
loop do day += 1; total -= 86400; break if total < 0; end; day -= 1;
total += 86400
loop do hour += 1; total -= 3600; break if total < 0; end; hour -=
1; total += 3600
loop do min += 1; total -= 60; break if total < 0; end; min -= 1;
total += 60
puts "your total is #{day} days, #{hour} hours, #{min} mins,
#{total} secs"
end
as you can see, i'd like to refactor that so i just have to
dotime( :day, 86400 )
dotime( :hour, 3600 )
dotime( :min, 60 ) (i can hardcode 'total' in the
function, doesn't matter?)
But no eval I use works, either the eval isn't defined for my class
(assume main:Object) or I get "no method for + (nilpointer). I read
about how you shouldn't use string eval, etc. A simple pointer to
some help would be awesome! Thanks guys.
PS, if a time function does this, don't spoil the metaprogramming for
me? I'd like to learn anyway.
-Mike