Programing

이름이 주어진 인스턴스 변수의 값을 가져옵니다.

lottogame 2020. 8. 28. 07:47
반응형

이름이 주어진 인스턴스 변수의 값을 가져옵니다.


일반적으로 문자열에 이름이있는 객체에 대한 참조를 얻으려면 어떻게해야합니까?

더 구체적으로, 매개 변수 이름 목록이 있습니다 (멤버 변수-동적으로 빌드되어 직접 참조 할 수 없음).

각 매개 변수는 from_s메소드 도있는 객체입니다 .

다음과 같은 작업을하고 싶습니다 (물론 작동하지 않습니다 ...).

define_method(:from_s) do | arg |
    @ordered_parameter_names.each do | param |
        instance_eval "field_ref = @#{param}"
        field_ref.from_s(param)
    end
end

이를 달성하는 가장 관용적 인 방법은 다음과 같습니다.

some_object.instance_variable_get("@#{name}")

+또는 사용할 필요가 없습니다 intern. 루비는 이것을 잘 처리 할 것입니다. 그러나 다른 개체에 도달하여 해당 ivar를 빼 내면 캡슐화가 손상되었을 가능성이 상당히 높습니다.

ivar에 명시 적으로 액세스하려는 경우 올바른 방법은 액세스 자로 만드는 것입니다. 다음을 고려하세요:

class Computer
  def new(cpus)
    @cpus = cpus
  end
end

Computer.new경우을 사용 instance_variable_get하면 을 사용 하여 @cpus. 하지만 만약 당신이 이것을하고 있다면, 당신은 아마도 @cpus공개를 의미 할 것입니다 . 당신이해야 할 일은 :

class Computer
  attr_reader :cpus
end

이제 할 수 있습니다 Computer.new(4).cpus.

참고 당신은 다시 할 수 있는 기존의 클래스를하고 판독기에 개인 바르합니다. 접근자는 방법 일 뿐이므로 다음을 수행 할 수 있습니다.Computer.new(4).send(var_that_evaluates_to_cpus)


인스턴스 변수 이름에서 인스턴스 변수를 얻으려면 다음을 수행하십시오.

name = "paramName"
instance_variable_get(("@" + name).intern)

이것은 인스턴스 변수의 값을 반환합니다 @paramName

참고 URL : https://stackoverflow.com/questions/1074729/get-the-value-of-an-instance-variable-given-its-name

반응형