2011-11-21 42 views
10

Tôi muốn hiểu một đoạn mã tôi tìm thấy trong Google:Ý nghĩa của i.to_s trong Ruby là gì?

i.to_s 

Trong đoạn mã trên i là một số nguyên. Theo sự hiểu biết của tôi, i đang được chuyển đổi thành một chuỗi. Điều đó có đúng không?

+1

Bạn đoán đúng, phương thức 'to_s' trả về biểu diễn chuỗi của đối tượng (trong trường hợp đó là số' i'). Nhưng đối với loại câu hỏi đó, tôi khuyên bạn nên sử dụng Ruby [documentation] (http://www.ruby-doc.org/). Bạn có thể tìm tài liệu cho mọi phương thức từ thư viện chuẩn ở đó. –

+0

cảm ơn bạn thực sự dễ hiểu –

Trả lời

20

Tốt hơn để nói rằng đây là biểu thức trả về biểu diễn chuỗi của số nguyên i. Bản thân số nguyên không thay đổi. #pedantic.

Trong IRB

>> 54.to_s 
=> "54" 
>> 4598734598734597345937423647234.to_s 
=> "4598734598734597345937423647234" 
>> i = 7 
=> 7 
>> i.to_s 
=> "7" 
>> i 
=> 7 
2

Điều đó là chính xác. to_s chuyển đổi bất kỳ đối tượng nào thành chuỗi, trong trường hợp này (có thể) là số nguyên, vì biến được gọi là i.

6

Như đã đề cập trong câu trả lời khác, gọi .to_s trên một số nguyên sẽ trở lại với chuỗi đại diện của số nguyên đó.

9.class   #=> Fixnum 
9.to_s   #=> "9" 
9.to_s.class #=> String 

Nhưng bạn cũng có thể vượt qua một cuộc tranh cãi để .to_s thay đổi nó từ cơ sở mặc định = 10 để bất cứ điều gì từ cơ sở 2 để cơ sở 36. Dưới đây là tài liệu: Fixnum to_s. Vì vậy, ví dụ: nếu bạn muốn chuyển đổi số 1024 thành số nhị phân (còn gọi là Cơ sở 2, chỉ sử dụng "1" và "0" để đại diện cho bất kỳ số nào), bạn có thể làm:

1024.to_s(2) #=> "10000000000" 

Chuyển đổi sang Base 36 có thể hữu ích khi bạn muốn tạo kết hợp ngẫu nhiên các chữ cái và số, vì nó đếm bằng cách sử dụng mọi số từ 0 đến 9 và sau đó mỗi chữ cái từ a đến z. Base 36 explanation on Wikipedia. Ví dụ, đoạn mã sau sẽ cung cấp cho bạn một chuỗi ngẫu nhiên các chữ cái và số có độ dài từ 1 tới dài 3 ký tự (thay đổi từ 3 đến bất cứ điều gì dài chuỗi tối đa mà bạn muốn, làm tăng khả năng tổ hợp):

rand(36**3).to_s(36) 

Để hiểu rõ hơn về cách các con số được viết trong các hệ thống cơ bản khác nhau, đặt mã này thành irb, thay đổi số 36 trong dấu ngoặc đơn cho hệ cơ sở mà bạn muốn tìm hiểu. Bản in kết quả sẽ được tính từ 0 đến 35, trong đó hệ thống cơ sở bao giờ bạn chọn

36.times {|i| puts i.to_s(36)}