Alias và Alias_method trong Rails
Alias và Alias_method được sử dụng để tạo ra các bí danh(aliases) cho các phương thức hoặc tên thuộc tính trong ruby. Bạn vẫn có thể gọi phương thức bằng tên cũ của chúng như bình thường, alias và alias_method cung cấp cho phương thức một định danh thứ 2 để khi bạn gọi đến nó, kết quả việc gọi ...
Alias và Alias_method được sử dụng để tạo ra các bí danh(aliases) cho các phương thức hoặc tên thuộc tính trong ruby. Bạn vẫn có thể gọi phương thức bằng tên cũ của chúng như bình thường, alias và alias_method cung cấp cho phương thức một định danh thứ 2 để khi bạn gọi đến nó, kết quả việc gọi phương thức bằng 2 cái tên khác nhau là như nhau
class UsersController < Application_Controller def full_name puts self.name end #Option 1: alias :name :full_name #Option 2: alias_method :name, :fullname end User.new.name => #user's name # You mush define method before you can use alias or alias_method
So sánh
alias_method: chấp nhận các tham số truyền vào dưới dạng tring hoặc symbol và sử dụng dấu "," để tách giữa 2 tham số
alias: chỉ chấp nhận symbol là tham số và không sử dụng ","
class Parent def method puts "parent" end #Option 1: alias :operation :method #Option 2: alias_method :operation, :method end class Child < Parent def method puts "children" end end #Option 1: Parent.operation => #parent Child.operation => #parent #Option 2: Parent.operation => #parent Child.operation => #children
Điểm khác biệt lớn nhất giữa alias và alias_method là phạm vi trong việc thực hiện.
Như ở ví dụ trên khi gọi tới hàm operation định nghĩa bởi alias ở trong lớp kế thừa Child, kết quả trả về vẫn là của hàm trong lớp Parent.
Trong khi đó nếu sử dụng alias_method, việc gọi tới method operation trong 2 lớp Parent và Child sẽ trả về 2 kết quả khác nhau.
=> Việc sử dụng alias và alias_method tùy vào mục đích của lập trình viên. Mặc dù vậy alias_method linh hoạt hơn và cho phép chúng ta override phương thức trong các lớp con, vì vậy thường được sử dụng trong plugins, extensions, deprecating variables để duy trì tính tương thích với các hệ thống cũ