adding attributes to a Ruby object dynamically

前端 未结 6 2023
梦毁少年i
梦毁少年i 2020-12-24 06:07

I have an object created, and I want, based on some conditional check, to add some attributes to this object. How can I do this? To explain what I want:

A=O         


        
6条回答
  •  盖世英雄少女心
    2020-12-24 06:47

    First of all the thing about ruby is that it allows a different syntax which is used widely by ruby coders. Capitalized identifiers are Classes or Constants (thanks to sepp2k for his comment), but you try to make it an object. And almost nobody uses {} to mark a multiline block.

    a = Object.new
    if (something happens)
      # do something
    end
    

    I'm not sure what your question is, but I have an idea, and this would be the solution:

    If you know what attributes that class can have, and it's limited you should use

    class YourClass
      attr_accessor :age
    end
    

    attr_accessor :age is short for:

    def age
      @age
    end
    def age=(new_age)
      @age = new_age
    end
    

    Now you can do something like this:

    a = YourClass.new
    if (some condition)
      a.age = new_value
    end
    

    If you want to do it completely dynamically you can do something like this:

    a = Object.new
    if (some condition)
      a.class.module_eval { attr_accessor :age}
      a.age = new_age_value
    end
    

提交回复
热议问题