Alias in Ruby
Bài đăng này đã không được cập nhật trong 5 năm
Bạn đã đùng alias trong ruby chưa? , vậy hôm này chúng ta cùng đi tìm hiểu nhé 
1.Alias in Ruby
Trong bài viết này, tôi sẽ cùng các bạn tìm hiểu các vấn đề sau:
- The
aliaskeyword - The
alias_methodkeyword aliasesand scopesaliasesbehind the scene
2.The alias keyword
Ruby cung cấp cho chúng ta alias keywork để thỏa thuận với method và attributes
class Book
def book_name
"Davici code"
end
alias bookname book_name
alias name bookname
end
book = Book.new
p book.book_name # "Davici code"
p book.bookname # "Davici code"
p book.name # "Davici code"
Ở đây chúng ta đã định nghĩa method Book#book_namevà định nghĩa một bookname alias cho method này.
Nên lúc này ta có bookname là alias của method book_name và name lại là alias của bookname
Do đó khi ta gọi name hoặc booknamethi cùng trả về một kết quả.
3.The alias_methodmethod
class Book
def book_name
"Davici code"
end
alias_method :bookname, :book_name
alias name 'bookname', :book_name
end
book = Book.new
p book.book_name # "Davici code"
p book.bookname # "Davici code"
p book.name # "Davici code"
Cũng giống như
aliaskeywork chúng ta cũng định nghĩa methodBook#book_namevà định nghĩabookname,namelà alias của mehtod. Chúng ta dễ dang nhìn thấyalias_methodlấyStringvàSymbollà tham số, điều này giúpRubyxác định đượcaliashay làalias_mehtod
4.Alias và scopes
Trong thực tể thì Module#alias_method có cách hoạt động khác với alias keywork trong một điểm đố là scope.
Hãy xem xét ví dụ sau:
class Device
def description
'I\'m a device'
end
def self.alias_description
alias_method :describe, :description
end
end
class Microwave < Device
def description
'I\' a microwave'
end
alias_description
end
m = Microwave.new
p m.description # => "I' a microwave"
p m.describe # => "I' a microwave"
Ở đây chúng ta có thể thấy rằng khi gọi method
alisa_methodtrong methodDevice#alias_descriptionxác định alias được định nghĩa trên methoddescribetrên methodMicrowave#descriptionchứ không phải trênDevice#description.
Bây giờ hãy xem chuyện gì xảy ra với alias keyword:
class Device
def description
'I\'m a device'
end
def self.alias_description
alias describe description
end
end
class Microwave < Device
def description
'I\' a microwave'
end
alias_description
end
m = Microwave.new
p m.description # => "I' a microwave"
p m.describe # => "I'm a device"
Chúng ta có thể thấy khi gọi alias trong method Device#alias_description, alias describe của Device#descriptionchứ không phải Microwave#description
5.Aliases behind the scene
Nào chúng ta hay quay lại ví dụ về Book class để tìm hiểu điều gì xảy ra alias được định nghĩa.
class Book
def book_name
"Davici code"
end
alias bookname book_name
alias name bookname
end
book = Book.new
p book.book_name # "Davici code"
p book.bookname # "Davici code"
p book.name # "Davici code"
Behind the scene username alias được coi là một phương pháp.
Trong ruby mồi method sẽ được chèn vào một table để keep track tât các method của chương trình của bạn. Bảng này được gọi là method_entry table.
Vì vậy book_name method là một new entry được chèn vào method_entry table . Sẽ bao gồm những thành phần:
- Đinh danh phương thức `book_name'
- Nội dung của method
Book#book_name - Book class
Đó là cách mà
aliaskeyword vàalias_methodcó thể xác đinh được alias method hiện có. Bây giờ chúng ta nhìn đến new entry aliasbooknamegồm có:
- Đinh danh
booknamemethod - Nội dung của method
Book#book_name - Class
Book
Đó là cách mà alias keyword và method alias_method xác định bí danh cho một phương thức hiện có.
Lưu ý rằng entry chứa nhiều thông tin hơn tôi đã mô tả để giữ cho nó thật đơn giản chúng ta tập trung vào aliaskeyword.
Link thảo: https://medium.com/rubycademy/alias-in-ruby-bf89be245f69
All rights reserved