Điều này đã giúp tôi thức giấc vào ban đêm một thời gian.Cú pháp của bí danh Ruby được cho phép như thế nào?
class Foo
def bar
'bar'
end
# What the hell is going on here?!?
alias :baz :bar
end
Foo.new.baz #=> 'bar'
Tại sao alias
lấy 2 biểu tượng làm đối số, nhưng không có dấu phẩy tách chúng? Điều đó dường như không phải là bất kỳ dạng cú pháp hợp lệ nào trong bất kỳ ngữ cảnh nào khác. Và trên thực tế, nếu bạn sử dụng dấu phẩy, nó thực sự là ném lỗi cú pháp.
alias :bar, :baz
# syntax error, unexpected ','
Tuy nhiên, nếu tôi cố gắng để vượt qua 2 biểu tượng trong cùng một cách với phương pháp của riêng tôi, nó cũng phát nổ:
def somemethod(*args)
:whatever
end
somemethod :a :b
# syntax error, unexpected ':', expecting $end
- Vì vậy, tại sao phương pháp
alias
được sử dụng một cú pháp gì khác được sử dụng? - Có thể sử dụng cú pháp này trong bất kỳ ngữ cảnh nào khác không?
- Lợi ích của việc sử dụng cú pháp cú pháp kỳ quặc này là gì, khi không có gì khác trong ngôn ngữ hoạt động theo cách này? Tôi thấy không có lợi ích rõ rệt đối với sự không nhất quán về ngôn ngữ này.
Vì vậy, vì đó là một từ khóa, nó cho phép một cú pháp đặc biệt được mã hóa cứng vào trình thông dịch chỉ trong trường hợp này? Đó là loại mùi. –
@ Alex, vâng, nó được mã hóa cứng trong trình thông dịch.Có một lý do chính đáng cho nó đối với một số nhu cầu lập trình bởi vì bạn có thể chắc chắn rằng bí danh xảy ra vào thời gian đọc, không phải thời gian chạy. – joelparkerhenderson
@AlexWayne: Điều tương tự có thể được nói về từ khóa 'else' hoặc từ khóa' case'. Bạn có thực sự nghĩ rằng đó là một mùi thiết kế cho các từ khóa để có cú pháp cụ thể của riêng mình? Tôi muốn thách thức bạn tìm thấy bất kỳ ngôn ngữ lập trình bậc cao nào mà không có từ khóa nào có cú pháp riêng và tất cả chúng đều hoạt động giống như các cuộc gọi phương thức. – Jazz