Sử dụng alias trong Ruby
Bài đăng này đã không được cập nhật trong 7 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 usernamealias cho phương thức này.
- Tiếp theo, ta đặt cho usernamealias một alias khác làname
- Vì vậy, mỗi lần ta gọi đến namehayusernamethì nó sẽ gọi lại code trongUser#fullnamemethod 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ư aliaskeyword, ta đinh nghĩaUser#fullnamemethod và ta định nghĩausernamealias cho method này.
- Sau đó, usernamealias được đặt lại bằngnamealias.
- Vì vậy, mỗi lần gọi đến name,usernamehayfullnamethì ta sẽ nhận được cùng một kết quả.
 Chúng ta có thể thấy rằngalias_methodmethod nhận mộtStringhoặc mộtSymbollà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_descriptionmethod và định nghĩadescribealias trênMicrowave#descriptionmethod chứ không phảiDevice#description.
- Bây giờ ta sẽ thử với aliaskeyword:
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 aliaskeyword thìdescribealias sẽ sử dụng trênDevice#descriptionmethod 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
 
  
 