NilClass
, TrueClass
및 FalseClass
즉, 각 상수 nil
, true
및 false
를 하나 개의 인스턴스를 가지고 무엇 NilClass, TrueClass의 목적이며, FalseClass? 왜 그들은 Object
클래스의 인스턴스가 될 수 없으며 모든 관련 메서드는 nil
, true
및 false
에 대한 싱글 톤 메서드로 간단히 정의 할 수 있습니까? 이와 관련된 질문은 왜 이것들을 상수로 정의하지 않는 것입니까?이러한 클래스를 갖는 목적은 무엇인가,
답변
"모든 것이 개체"이고 "개체는 인스턴스의 클래스에 의해 특수화됩니다"라는 생각을 계속 유지합니다.
nil
, true
및 false
모든 객체 (및 방법과 클래스의 인스턴스화이다). 그들이 부과하는 것은 1) 각각의 유형의 유일한 거주자이며 2) 불변 객체 은 구현 최적화를 허용합니다. - 실제로는 하나가 아닙니다.nil
이 충분합니까?
값을 지정하지 않고 유용한 오류 메시지 : x.class
"그냥 작동합니다".
> > nil.foo
> => #<NoMethodError: undefined method `foo' for nil:NilClass>
내가 말했다 기쁘다 NilClass
:-)
이 클래스 인스턴스 접근 방식은 또한 재 개방 NilClass
한다 - 그것은을 위해 할 수있는 방법을 쉽게하고 일관된 등 -에 대한 좋든 나쁘 다른 유형.
적어도 루비를 1.9.2의로 재 지정 true
, false
또는 nil
할 수 없습니다 (참/거짓의 파이썬 2.x에서 허용 된 재 할당,하지만 파이썬 3.x의에서 않습니다). true/false/nil
은 이 아니기 때문에 상수이기 때문에 상수 룩업없이 "리터럴 값"으로 AST 또는 구현에서 사용하는 모든 것으로 최적화 할 수 있습니다.
> > VERSION
> => "1.9.2"
> > true = false
> => #<SyntaxError: Can't change the value of true>
> > [].each {|true|}
> => #<SyntaxError: Can't change the value of true>
해피 코딩.
물론 이것들은 객체이기 때문에 어떤 클래스에 속해야합니다. 왜 그들이'Object' 클래스의 인스턴스가 될 수 없는지 묻고 있습니다. 나는 상수에 관한 대답의 두 번째 부분을 얻는다. 그 점 때문에 저를 지워줍니다. – sawa
루비의 접근 방식을 취하고 "단지 객체를 가지고 여기에 몇 가지 싱글 방법을 추가"시간의 일부 : 개인 : 공공, :
C:\Documents and Settings\a.grimm>irb
irb(main):001:0> self.methods - Object.new.methods
이
[제공 포함 : 문맥 : conf의 : irb_quit : 출구, 는 : 종료 : irb_print_working_workspace을 : irb_cwws을 : irb_pwws을 : cwws, : pwws : irb_current_working_binding : irb_print_working_binding, : irb_cwb : irb_pwb : irb_chws를 : irb_cws, : chws, : cws, : irb_change_binding, : irb_cb, : cb, : 작업 영역, : irb_bindings, : 바인딩, : irb_pushws, : pushws, : irb_pushb, : irb_pushb, : pushb, : irb_popws, : popws, : irb_pop_binding, : irb_popb, : popb , : 소스 : 작업 : FG : 죽 : 도움 : irb_exit : irb_context, : install_alias_method : irb_current_working_workspace, : irb_change_workspace : irb_workspaces : irb_push_workspace, : irb_pop_workspace : irb_load : irb_require, : irb_source : IRB, : irb_jobs : irb_fg는 : irb_kill : 그들은
true
,false
또는 0이 접근하지 않는 이유 irb_help]
나도 몰라. 어쩌면 사람들은 (pst의 대답에 따라) 이러한 객체를 이해해야하는 반면, 사람들은 "메인"(?) 객체를 이해할 필요가 없기 때문일 수 있습니다.
주요 개체는 나에게 특별한 경우처럼 보입니다. 대부분의 프로그램은 한번도 참조하지 않습니다. – diedthreetimes
- 1. 이러한 PHPDOC 속성의 목적은 무엇입니까? 일반적으로
- 2. 사용 목적은 무엇입니까 !! 이러한 상황에서?
- 3. 추적 클래스를 갖는 리스너
- 4. 서버 측 액세스 토큰을 갖는 목적은 무엇입니까?
- 5. 이러한 IIS 바인딩은 무엇이며 그 목적은 무엇입니까?
- 6. scala.runtime에서 이러한 Java 파일의 목적은 무엇입니까?
- 7. C#에서는 정적 클래스를 표시하는 목적은 무엇입니까?
- 8. Java 직렬화 가능 클래스를 확장하는 목적은 무엇입니까?
- 9. 하나의 서버에 여러 개의 IP를 갖는 목적은 무엇입니까?
- 10. 목록은 내가 속성으로 목록을 갖는 클래스를 생성했습니다
- 11. 인수를 사용하여 생성자를 갖는 추상 클래스를 테스트하십시오.
- 12. MKNetworkKit의 여러 하위 클래스를 갖는 방법은 무엇입니까?
- 13. 이러한 클래스를 올바르게 디자인하는 방법은 무엇입니까?
- 14. 이러한 일반 클래스를 생성하는 방법은 무엇입니까?
- 15. 무엇인가 동등합니까?
- 16. 목적은, StructureMap-MVC3에서 scan.WithDefaultConventions는
- 17. 이러한 종류의 동시성 관련 클래스를 어떻게 호출합니까? 표준 구현이 있습니까?
- 18. 목적은
- 19. 목적은
- 20. 혼합 생성자의 목적은 무엇입니까?
- 21. NSOrderedSame을 사용하는 목적은 무엇입니까?
- 22. LINQ의 Expression.Quote 메서드의 목적은 무엇입니까?
- 23. mdf 파일의 목적은 무엇입니까?
- 24. 파이썬에서`//`연산자의 목적은 무엇입니까?
- 25. 여기서 serialVersionUID를 사용하는 목적은 무엇입니까?
- 26. 이벤트 호출자의 목적은 무엇입니까?
- 27. WebExceptionStatus.Success의 주 목적은 무엇입니까?
- 28. System.Data.SqlClient.SqlParameter.IsNullable의 목적은 무엇입니까?
- 29. MySQL의 BLACKHOLE 엔진의 목적은 무엇입니까?
- 30. ThreadLocal의 목적은 무엇입니까?
좋은 질문입니다. 파이썬에서도 마찬가지입니다. 따라서 그 뒤에 충분한 이유가 있어야합니다. –
루비의 상수는 실제로 일정하지 않습니다. http://www.rubyist.net/~slagell/ruby/constants.html – house9
질문이 있습니다. * 이러한 값 각각에 대해 별도의 클래스를 사용하지 않는 * 이점은 무엇입니까? 싱글 톤 방법을 사용하는 것은 거의 간단한 해결책이 아니며 불필요한 복잡성 IMO를 추가합니다. – diedthreetimes