/ / instance_eval nefunguje s att_accessor? - ruby, block, instance-eval

instance_eval nefunguje s att_accessor? - rubín, blok, inštancia-eval

Môže mi niekto povedať, prečo to nefunguje:

class A
attr_accessor :b
end

a = A.new
a.instance_eval do
b = 2
end

a.b
=> nil

Čo robím zle?

odpovede:

6 pre odpoveď č. 1

Vinník leží v tejto časti kódu:

a.instance_eval do
b = 2
end

Hoci b = 2 sa hodnotí v kontexte vašej inštancie, nevolá nastavovač. Namiesto toho iba vytvára novú miestnu premennú s názvom b v súčasnom rozsahu. Ak chcete zavolať nastavovači, musíte ďalej objasniť svoj kód, aby ste vyriešili nejasnosti:

a.instance_eval do
self.b = 2
end

0 pre odpoveď č. 2

Zmena:

a.instance_eval do
self.b = 2
end