반응형
루비의 노드 이름으로 클래스 인스턴스를 어떻게 만듭니 까?
클래스 이름이 해당 클래스의 스키마에 존재하는 각 클래스의 속성을 반복 할 수있는 클래스의 인스턴스를 만들고 싶습니다.
어떻게 될까요?
- 확인하려는 클래스의 클래스로 이름이 있습니다.
- 내가 할 수있는 클래스 인스턴스를 인스턴스화해야한다고 생각합니다.
- 속성을 반복하고 인쇄하십시오.
레일에서 다음을 수행 할 수 있습니다.
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>
Rails에서 매우 간단 : 사용 String#constantize
class_name = "MyClass"
instance = class_name.constantize.new
이 시도 :
Kernel.const_get("MyClass").new
그런 다음 인스턴스 변수를 반복합니다.
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
.
반응형
'IT' 카테고리의 다른 글
언제 java.lang.Error를 잡아야하나요? (0) | 2020.08.03 |
---|---|
터미널을 통해 레일 앱으로 json 게시 요청 컬 (0) | 2020.08.03 |
AngularJS- 컨트롤러에서 날짜 변환 (0) | 2020.08.03 |
Android P 가시성 knownimagebutton.setVisibility는 동일한 라이브러리 그룹에서 호출 할 수 있습니다. (0) | 2020.08.03 |
두 개의 포인터 만 사용하여 단일 연결 목록을 뒤집는 방법은 무엇입니까? (0) | 2020.08.03 |