반응형
루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까?
클래스의 이름을 가지고 있으며 해당 클래스의 인스턴스를 만들어 해당 클래스의 스키마에 있는 각 레일 특성을 루프할 수 있도록 합니다.
제가 그걸 어떻게 해야 할까요?
- 확인할 클래스의 문자열로 이름을 가지고 있습니다.
- 클래스 인스턴스를 인스턴스화해야 다음 작업을 수행할 수 있습니다.
- 속성을 반복해서 인쇄합니다.
레일에서는 다음을 수행할 수 있습니다.
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
반응형
'programing' 카테고리의 다른 글
dplyr을 사용하여 중복된 행 제거 (0) | 2023.06.05 |
---|---|
종료 메시지 작성 방법 (0) | 2023.06.05 |
onActivityResult가 fragment에서 호출되지 않습니다. (0) | 2023.06.05 |
날짜당 여러 개가 존재하는 경우 개최되는 레슨/이벤트 수를 보다 간결하게 계산하는 방법 (0) | 2023.06.05 |
행 이름을 첫 번째 열로 변환하려면 어떻게 해야 합니까? (0) | 2023.06.05 |