2013-09-03 18 views
17

Ý nghĩa khác nhau của ký hiệu sắc nét/số hiệu/pound/băm (#) của Ruby là gìDấu # (sắc nét, số, bảng Anh, băm) được sử dụng trong Ruby là gì?

Có bao nhiêu bối cảnh biểu tượng # trong Ruby?

Tôi biết rằng # 'đại diện cho bình luận

# a comment 

hoặc 'chuyển đổi sang giá trị':

i = 1 
print "#{i}" # simple example 

Tuy nhiên tôi cũng thấy một số tài liệu của Ruby mô tả việc tích hợp các phương pháp như thế này :

Array#fill 
File::file? 

Tại sao họ mô tả cùng một điều bằng cách sử dụng 2 biểu tượng khác nhau? Tôi mới trong Ruby. Cảm ơn

+7

Đối với phần thứ hai của câu hỏi của bạn: '#' biểu thị một phương thức thể hiện và '::' biểu thị một phương thức lớp. –

Trả lời

10

Đây là cách dụ phương pháp mô tả:

Array#fill 

Vì vậy, bạn có thể:

a = Array.new(2) 
=> [nil, nil] 
a.fill(42) 
=> [42, 42] 

Đây là cách lớp phương pháp mô tả:

String::new 

s = String.new('abc') 
=> "abc" 
8

Trong Perl, # được sử dụng để nhận xét và vì Perl là 'tổ tiên' của Ruby, vai trò đã được chuyển sang.

Cú pháp "#{}" được gọi là 'suy' và đồng bảng Anh đã được chọn rất có thể vì suy cũng tương tự như trong một tinh thần để cho ý kiến, bởi vì bạn đang thay đổi bối cảnh của mã của bạn (trong trường hợp này khác bối cảnh để thực hiện)

# sau một tên lớp chỉ có nghĩa là để chỉ định định danh sau đây là một phương pháp của lớp đó, và chỉ là một quy ước. Đọc thêm về nó ở đây: Why are methods in Ruby documentation preceded by a hash sign?

1

Chỉ để hiển thị cho bạn ví dụ, Ruby hiển thị phương thức mẫu được đặt trước với ký hiệu # và các phương thức lớp trước biểu tượng ..

class Foo 
    def self.foo;end 
    def bar;end 
end 

p Foo.method(:foo) # => #<Method: Foo.foo> 
p Foo.new.method(:bar) # => #<Method: Foo#bar> 
1

Các :: là thú vị, nó hoạt động tương tự như . ở chỗ bạn có thể gọi phương pháp thông qua cả hai

Car::is_hybrid? 

car.is_hybrid? 

Như bạn sẽ thấy trong hầu hết các mã mặc dù . được ưu tiên cho các phương thức.

Một trường hợp trong đó :: thường được ưu tiên là nơi bạn có số không đổi trong lớp và bạn sẽ thấy điều này trong các cuộc gọi hệ thống như Math::PI hoặc số bạn tạo, ví dụ:ThePentagon::NUMBER_OF_BUILDING_SIDES