class
là một từ khóa dùng để định nghĩa một lớp mới. Vì nó là một từ khóa dành riêng nên bạn không thể sử dụng nó như một tên biến. Bạn không thể sử dụng bất kỳ từ khóa nào của Ruby làm tên biến, vì vậy bạn sẽ không thể có các biến có tên def
hoặc module
hoặc if
hoặc end
, v.v. - class
cũng không khác gì.
Ví dụ, hãy xem xét những điều sau:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Cố gắng chạy điều này dẫn đến lỗi, vì bạn không thể sử dụng class
làm tên biến.
test.rb:1: syntax error, unexpected kCLASS, expecting ')'
def show_methods(class)
^
test.rb:2: syntax error, unexpected ')'
puts Object.const_get(class).methods.inspect
Để khắc phục, chúng tôi sẽ sử dụng số nhận dạng klass
để thay thế. Nó không đặc biệt, nhưng nó thường được sử dụng như một tên biến khi bạn đang xử lý một lớp hoặc tên lớp. Nó giống nhau về mặt ngữ âm, nhưng vì nó không phải là một từ khóa dành riêng, nên Ruby không có vấn đề gì với nó.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Đầu ra, như mong đợi, là
["method", "inspect", "name", "public_class_method", "chop!"...
Bạn có thể sử dụng bất kỳ tên biến (không dành riêng) nào ở đó, nhưng cộng đồng đã sử dụng klass
. Nó không có phép thuật đặc biệt nào - nó chỉ có nghĩa là "Tôi muốn sử dụng tên 'class' ở đây, nhưng tôi không thể, vì nó là một từ khóa dành riêng".
Một lưu ý nhỏ, vì bạn đã gõ sai một vài lần, nên cần lưu ý rằng trong Ruby, trường hợp là vấn đề. Các mã bắt đầu bằng chữ in hoa là hằng số. Qua Pickaxe :
Một tên hằng bắt đầu bằng một ký tự hoa, theo sau là các ký tự tên. Tên lớp và tên mô-đun là hằng số và tuân theo các quy ước đặt tên không đổi. Theo quy ước, các biến hằng số thường được viết bằng chữ hoa và dấu gạch dưới xuyên suốt.
Do đó, cách viết đúng là class
và klass
, thay vì Class
và Klass
. Cái sau sẽ là hằng số và cả hai Class
và Klass
đều là những tên hằng hợp lệ, nhưng tôi khuyên bạn không nên sử dụng chúng cho mục đích rõ ràng.