Strange values being output to screen from ruby script -
define_method :hash_count hash = '' hash << 'x' while hash.length < 25 hash # returns hash method end puts hash i expecting
xxxxxxxxxxxxxxxxxxxxxxxx to outputted screen. instead bizarre random numbers such
3280471151433993928 and
-1945829393073068570 could please explain? scoping in ruby seems way weirder in php/javascript!
i see expect this. scope problem.
the variable hash exists both inside , outside of block function call. whenever declare variable or function same name shadowing in scope - is, make older invalid , using defined behaviour name.
in case, declared in scope of block, , shadowed object#hash function string variable inside do/end block. however, variable not shadowed outside of block, , kept original function call.
so, example
hash = '' define_method :hash_count hash << 'x' while hash.length < 25 hash # returns hash method end puts hash should work expected because shadowing hash in same scope using puts. similar reasons, if do
def hash_count = '' << 'x' while hash.length < 25 # returns hash method end puts it should raise undefined variable error, because not defined in scope.
Comments
Post a Comment