Writing Prettier Ruby Code with instance_eval
instance_eval is a method of ruby Object class that lets you pass a string of ruby code or a block to be evaluation in the scope of that object.
Through instance_eval you can actually add new methods to a particular object. This can help you write more pretty and readable code. for example, we can define a new average method for an array of numbers
>> a = [1, 2, 3, 4, 5, 6, 7, 8]
=> [1, 2, 3, 4, 5, 6, 7, 8]
>> a.sum
=> 36
>> a.size
=> 8
>> a.average
NoMethodError: undefined method `average' for [1, 2, 3, 4, 5, 6, 7, 8]:Array
from (irb):14
>> a.sum / a.size
=> 4
>>
With instance_eval we can add that new method here
a.instance_eval do
def average ; sum/size end
end
>> a.average
=> 4
In a lot of cases this approach can be useful.
Comments
and you are so right about the usage, it is very handy
Thanks for the tip :)
actually i used this method in a piece of code that would have looked very messy without it..
i'll probably be talking about it soon isA
a = [1, 2, 3, 4, 5, 6, 7, 8]
a.size
a.sum rescue puts("Method not found")
a.average rescue puts("Method not found")
def a.sum
inject(0){|a,e| a + e}
end
def a.average
sum / size
end
a.average