A few block-related questions


#1

Hi all.

Here is the code:

str = ‘some string’
blk = lambda{|arg| self.text = str; self.text = arg}

class A
def text=(str)
#blah
end
end

A.new.instance_eval( &blk )

Questions about the code:

  1. str would be always visible to block? (Quick tests says yes, but it
    was
    unexpected for me)
  2. how can I pass argument to block?

Thanks.

Victor.


#2

“V” == Victor S. removed_email_address@domain.invalid writes:

V> 1. str would be always visible to block? (Quick tests says yes, but
it was
V> unexpected for me)

yes,

V> 2. how can I pass argument to block?

use #instance_exec (1.9 only)

Guy Decoux


#3

From: ts [mailto:removed_email_address@domain.invalid]

use #instance_exec (1.9 only)
Thanks a lot! I use exactly 1.9.

Guy Decoux

Victor.


#4

2006/5/8, Victor S. removed_email_address@domain.invalid:

end

end

A.new.instance_eval( &blk )

Questions about the code:

  1. str would be always visible to block? (Quick tests says yes, but it was
    unexpected for me)
  2. how can I pass argument to block?

You can as well pass self as argument:

blk = lambda {|it, text| it.text=text}

a=A.new
blk.call a, str

Regards

robert


#5

From: Robert K. [mailto:removed_email_address@domain.invalid]

   #blah

You can as well pass self as argument:

blk = lambda {|it, text| it.text=text}

a=A.new
blk.call a, str

Yes, I can. But it looks a bit ugly, isn’t it?

robert

Victor.