2009-02-16 22 views
35

Điều này đã và đang làm phiền tôi một thời gian.Trong Ruby tại sao nil.id trả về 4?

>> nil.id 
(irb):2: warning: Object#id will be deprecated; use Object#object_id 
=> 4 

Tại sao nil.id là 4? (Hoặc nil.object_id nếu bạn muốn trở thành cầu kỳ về deprecations)

Trả lời

41

Điều này là do con số không là một đối tượng được tạo ra khi các ngôn ngữ khởi, và id của đối tượng đó xảy ra luôn luôn được 4.

Để biết thêm thông tin về lý do tại sao id xảy ra là 4, xem this bài đăng trên blog.

+30

Tôi là một lập trình viên Ruby Facebook và nó xảy ra rằng 4 cũng là Mark Zuckerber ID trên Facebook. Điều này dẫn tôi đến lỗi kỳ lạ nhất từng có ... ;-) –

+0

http://rxr.whitequark.org/mri/source/include/ruby/ruby.h?v=2.0.0-p481#421 – thomthom

+3

Đây không phải là true cho tôi "8" $ irb irb (chính): 001: 0> nil.object_id => 8 irb (chính): 002: 0> ruby ​​2.0.0p247 (2013-06-27 sửa đổi 41674) [x86_64-darwin13.3.0] – CantGetANick

4

Điều này xảy ra vì id của mọi đối tượng phải bằng cách nào đó được thể hiện trong trình thông dịch C Ruby. Các con số được ánh xạ tới (số * 2) +1, độ trung thực có 0, sai số có 2 và nil có 4 trái. Nó chỉ là một vấn đề thực hiện kỳ ​​lạ hoặc trừu tượng bị rò rỉ. Bạn không nên lo lắng về nó trừ khi bạn muốn viết một thông dịch viên Ruby.

11

Tôi luôn cho rằng đó là một quả trứng Phục sinh mát mẻ: Ở Nhật Bản 4 là số người chết.

0

Nếu bạn đang cố gắng này trong IRB bạn đang nhận được 4

irb 
>> NIL.id 
(irb):7: warning: Object#id will be deprecated; use Object#object_id 
=> 4 

Trong ruby ​​Nhật người đặt trên phương pháp nil gọi nó trả về 4 tiêu chuẩn ngôn ngữ của nó mà họ thiết lập 4 là "nguy hiểm" OR "Cái chết"

Các vấn đề liên quan