programing

루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까?

closeapi 2023. 6. 5. 23:55
반응형

루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까?

클래스의 이름을 가지고 있으며 해당 클래스의 인스턴스를 만들어 해당 클래스의 스키마에 있는 각 레일 특성을 루프할 수 있도록 합니다.

제가 그걸 어떻게 해야 할까요?

  1. 확인할 클래스의 문자열로 이름을 가지고 있습니다.
  2. 클래스 인스턴스를 인스턴스화해야 다음 작업을 수행할 수 있습니다.
  3. 속성을 반복해서 인쇄합니다.

레일에서는 다음을 수행할 수 있습니다.

clazz = 'ExampleClass'.constantize

순수한 루비:

clazz = Object.const_get('ExampleClass')

모듈 포함:

module Foo
  class Bar
  end
end

당신은 사용할 것입니다.

> clazz = 'Foo::Bar'.split('::').inject(Object) {|o,c| o.const_get c}
  => Foo::Bar 
> clazz.new
  => #<Foo::Bar:0x0000010110a4f8> 

매우 단순한 레일: 사용

class_name = "MyClass"
instance = class_name.constantize.new

사용해 보십시오.

Kernel.const_get("MyClass").new

그런 다음 개체의 인스턴스(instance) 변수를 반복 표시합니다.

obj.instance_variables.each do |v|
  # do something
end
module One
  module Two
    class Three
      def say_hi
        puts "say hi"
      end
    end
  end
end

one = Object.const_get "One"

puts one.class # => Module

three = One::Two.const_get "Three"

puts three.class # => Class

three.new.say_hi # => "say hi"

루비 2.0 및 이전 버전에서는Object.const_get다음과 같은 이름 공간에 대한 조회를 재귀적으로 수행합니다.Foo::Bar위의 예는 네임스페이스가 미리 알려져 있고 다음과 같은 사실을 강조하는 경우입니다.const_get에 독점적으로 호출하는 것이 아니라 모듈에서 직접 호출할 수 있습니다.Object.

언급URL : https://stackoverflow.com/questions/5924495/how-do-i-create-a-class-instance-from-a-string-name-in-ruby

반응형