2012-04-16 17 views
8

Tôi chỉ tìm thấy một vấn đề lạ trong ngôn ngữ lập trình ruby, nó không phải là một vấn đề lớn, nhưng tôi chỉ không thể hiểu tại sao nó xảy ra. Tôi sẽ quan tâm nếu ai đó biết vấn đề của tôi.Không phải là 00.0 giống với 0.0?

Trong ruby, bạn có thể viết 0 hoặc 00, điều đó không quan trọng, nó có cùng kết quả.
Nếu bạn chạy 0 === 00 bạn cũng nhận được true có nghĩa là hai đầu vào chính xác giống nhau.

0.0 cũng bằng 0, vì vậy một cách logic 00.0 cũng nên bình đẳng 0.0 nhưng vấn đề là, rằng nếu bạn cố gắng sử dụng số 00.0 sau đó bạn sẽ chỉ nhận được một lỗi. Nếu bạn chạy ví dụ:

a = 00.0 

Bạn nhận được lỗi này:

syntax error, unexpected tINTEGER

Tất nhiên tôi biết đây là một vấn đề nhỏ, nhưng như đã nói tôi muốn hiểu tại sao máy tính không xử lý 00.0 giống như 0.0?

+0

00.0 có hợp pháp về mặt toán học không? – texasbruce

+4

Nó là _mathematically_ hợp pháp. Câu hỏi đặt ra là nếu nó hợp pháp trong ruby. – Anthales

+1

Tôi sẽ chỉ đưa ra nhận xét này vì tôi không có cơ sở cụ thể cho việc này. Một ý tưởng, mặc dù, có lẽ là Ruby đánh giá 0 === 00 trên một mức độ bit, nhưng một khi bạn thêm một số thập phân, việc đánh giá được thực hiện như phao? Tại thời điểm đó 00.0 không phải là một đầu vào hợp pháp và có lẽ sẽ không bằng bất cứ điều gì, tôi sẽ nghĩ. – Colleen

Trả lời

4

Vấn đề là khi phân tích cú pháp và ruby ​​thấy rằng một số có nhiều hơn hai chữ số bắt đầu bằng ký tự 0, nó phân tích nó dưới dạng số nguyên bát phân. Vì vậy, khi nó phân tích cú pháp 00, nó là 0 trong bát phân, giống như 0 trong số thập phân. Nhưng nếu nó tìm thấy a. sau đó nó là một số nguyên không hợp lệ và đó là lỗi nó hiển thị.

+0

Trên thực tế phần '00.' vẫn còn tốt, Ruby coi nó như là một phương thức invokation trên đối tượng Fixnum (singleton)' 0', và mong đợi một biểu tượng hợp lệ cho tên phương thức sau dấu chấm. Ví dụ: '00.class # => Fixnum'. Tuy nhiên, vì '0' cuối cùng không phải là một biểu tượng hợp lệ, nó là một lỗi cú pháp. Do đó thông báo lỗi (Thông báo lỗi do OP cung cấp có ý nghĩa hơn 'Cú pháp Cú pháp: không. chữ nổi nữa đặt 0 trước dấu chấm.'). –

1

tôi đã cố gắng "a = 00.0" trong http://tryruby.com, và nhận được:

SyntaxError: no .<digit> floating literal anymore put 0 before dot. near line 1: "" 

Rõ ràng lexer Ruby không hy vọng rằng hình thức phao.

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