클래스에는 실제로 "이름"이 없습니다. 클래스는 다른 객체와 마찬가지로 객체이며 다른 객체와 마찬가지로 변수에 할당됩니다. 클래스에는 이름이 없으며 숫자처럼 또는 문자열에 이름이 없습니다.
foo = Class.new
Bar = foo
Baz = foo
Bar = nil
remove_const :Bar
클래스의 "이름"이 예에서 무엇을해야 :
이 예제를 가지고?
글쎄, 은이고 Module
클래스에는 name
이라고하는 방법이 있습니다. 그것이 무엇인지는 다음과 같습니다 : 클래스 객체가 처음으로 상수에 할당 된 경우 해당 상수의 이름 (심지어 은이 퍼지 개념입니다!)이 클래스의 이름이됩니다. 이름은 nil
이됩니다.
는 위의 예에 확장 : 심지어 Quux
불구하고 여전히 그 이름으로 Bar::Quux
을 인쇄 foo::Xyzzy
를 통해 Baz
내에 정의하고 액세스 할
foo = Class.new
Bar = foo
Baz = foo
class Baz
class Quux; end
Xyzzy = Quux
end
foo::Xyzzy.name
# => 'Bar::Quux'
참고 :
foo = Class.new
foo.name
# => nil
Bar = foo
foo.name
# => 'Bar'
Bar.name
# => 'Bar'
Baz = foo
Baz.name
# => 'Bar'
Bar = nil
remove_const :Bar
foo.name
# => 'Bar'
는 여기에 또 다른 예입니다. 클래스는 단순히 인간의 독자들에게 디버깅 도움이됩니다 당신이 결코는 다른 용도로 사용한다
Foo = Class.new
Bar = Foo
Foo = nil
remove_const :Foo
Foo = Class.new
Baz = Foo
Foo = nil
remove_const :Foo
Bar.name
# => Foo
Baz.name
# => Foo
Bar == Baz
# => false
"이름"과 :
또한, 두 개의 서로 다른 클래스는 같은 이름을 가질 수 프로그래밍 방식으로 사용하지 마십시오 (심지어 문자열의 특정 구조에 의존적 일 수도 있습니다).
'Foo.constants [0]'은': Bar' 심볼을 제공합니다. 그러나, 나는 당신의 인스턴스에 메시지를 구성하는 방법을 생각할 수 없다. 'obj'는 이름 문자열을 분리하는 것 외에는 똑같이한다. – dcorking
"바"는 무엇을 사용합니까? – dcorking
예 : 나는 Eat :: Apple, Eat :: Orange, Eat :: Banana, obj = "Eat :: # {fruit}"등 3 가지 클래스를 가지고 있습니다. constantize.new. 내가 먹고있는 과일이 확실하지 않아서 obj.class를 얻어야합니다.판단을위한 이름 – brookz