Can't change the value of self

Ok … I’ve googled this error and I see stome explanations about usnig
destructive methods …

I don’t get it.

Consider


class UD_Config
attr_accessor :container_list
attr_accessor :screen_x, :screen_y, :screen_width, :screen_height

@@config_filename = ‘config.yml’

def initialize
debugger
if File.exists? @@config_filename
config_yaml_str = IO.read(@@config_filename)
self = YAML::load( config_yaml_str ) # This line seems to be
the problem
else
set_defaults
end
end

def write_me
yaml_obj = YAML::dump( self )
File.open(filename,“w”) { |f| f << yaml_obj }
end

private

call this if there is no config file

def set_defaults
screen_x, screen_y, screen_width, screen_height = 30, 30, 600, 500

@container_list =
  %w(
    c:\abc\def.udd
    d:\def\ghi.udd
    f:\\ghi\jkl.udd
  )

end
end


I have been taught that “an object should take care of itself” …
what’s the right way to do what I want?

Ralph S. wrote:

I have been taught that “an object should take care of itself” …

It can take care of itself, it can’t turn into someone else :slight_smile:

If YAML.load is returning an instance of class UD_Config directly, then
just return that to the user. Make a class method, so they call

res = UD_Config.load(…)

instead of

res = UD_Config.new(…)

Otherwise, YAML.load is returning some other object - possibly a Hash -
with which you wish to initialize your new UD_Config object. So you need
to copy values out of that object into your object’s instance variables.

If YAML.load gives an object with instance variables, you can copy them
in a loop: look at ‘instance_variables’ and ‘instance_variable_get’ /
‘instance_variable_set’

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs