Sử dụng alias trong Ruby
Bài đăng này đã không được cập nhật trong 6 năm
Trong bài viết này, chúng ta sẽ tìm hiểu các vấn đề sau:
- alias keyword
- alias_method method
- aliases và scopes
1. alias keyword
Ruby cung cấp alias (bí danh) keyword để xử lý các alias của phương thức và thuộc tính
class User
def fullname
"Nam Dang"
end
alias username fullname
alias name username
end
u = User.new
p u.fullname # => "Nam Dang"
p u.username # => "Nam Dang"
p u.name # => "Nam Dang"
- Ở đây chúng ta định nghĩa một phương thức fullname của User và chúng ta định nghĩa một
username
alias cho phương thức này. - Tiếp theo, ta đặt cho
username
alias một alias khác làname
- Vì vậy, mỗi lần ta gọi đến
name
hayusername
thì nó sẽ gọi lại code trongUser#fullname
method và trả về cùng một kết quả.
2. alias_method Method
Module#alias_method
method chia sẻ cùng hành vi với alias
keyword nhưng nó tuân thủ cú pháp method
class User
def fullname
"Nam Dang"
end
alias_method :username, :fullname
alias_method "name", :username
end
u = User.new
p u.fullname # => "Nam Dang"
p u.username # => "Nam Dang"
p u.name # => "Nam Dang"
- Giống như
alias
keyword, ta đinh nghĩaUser#fullname
method và ta định nghĩausername
alias cho method này. - Sau đó,
username
alias được đặt lại bằngname
alias. - Vì vậy, mỗi lần gọi đến
name
,username
hayfullname
thì ta sẽ nhận được cùng một kết quả.
Chúng ta có thể thấy rằngalias_method
method nhận mộtString
hoặc mộtSymbol
làm đối số để xác định alias và method alias.
3. Aliases and scopes
Thực tế, Module#alias_method
hoạt động khác với alias
keyword trong một phạm vi cụ thể.
class Post
def description
"I'm a BanKai"
end
def self.alias_description
alias_method :describe, :description
end
end
class Comment < Post
def description
"Hello! Everybody"
end
alias_description
end
m = Comment.new
p m.description # => "Hello! Everybody"
p m.describe # => "Hello! Everybody"
- Ở đây chúng ta có thể thấy rằng,
alias_method
được sử dụng trong phương thứcDevice#alias_description
method và định nghĩadescribe
alias trênMicrowave#description
method chứ không phảiDevice#description
. - Bây giờ ta sẽ thử với
alias
keyword:
class Post
def description
"I'm a BanKai"
end
def self.alias_description
alias describe description
end
end
class Comment < Post
def description
"Hello! Everybody"
end
alias_description
end
m = Comment.new
p m.description # => "Hello! Everybody"
p m.describe # => "I'm a BanKai"
- Như vậy với việc sử dụng
alias
keyword thìdescribe
alias sẽ sử dụng trênDevice#description
method chứ không phảiMicrowave#description
. - Tài liệu tham khảo http://ruby-doc.org/stdlib-2.0.0/libdoc/rdoc/rdoc/RDoc/Alias.html
All rights reserved