Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách sử dụng từ khóa Ruby Super

Từ khóa super có tác dụng gì trong Ruby?

Nó gọi một phương thức trên lớp cha có cùng tên với phương thức gọi super .

Ví dụ :

Nếu bạn gọi một phương thức có tên i_like_chocolate , rồi bạn gọi super trong phương thức đó, Ruby sẽ cố gắng tìm một phương thức khác có cùng tên trên lớp cha của bất kỳ ai sở hữu phương thức này.

Điều này tiếp tục sôi sục qua chuỗi tổ tiên của lớp giống như một cuộc gọi phương thức thông thường .

Nếu phương thức không tồn tại, nó sẽ kích hoạt NoMethodError ngoại lệ và nếu một method_missing được tìm thấy nó sẽ sử dụng điều đó.

Bây giờ :

Hãy xem một số ví dụ về mã!

Siêu không tranh luận

Trong ví dụ sau, chúng ta có một Cat lớp kế thừa từ Animal .

Cat lớp có name phương pháp sử dụng super để gọi cùng một phương thức trên lớp cha của nó (Animal ).

Đây là mã:

class Animal
  def name
    puts "Animal"
  end
end

class Cat < Animal
  def name
    super
  end
end

cat = Cat.new
cat.name

# "Animal"

Từ khóa Ruby super hoạt động khác nhau khi được sử dụng có hoặc không có đối số .

Không có đối số:

Nó sẽ chuyển các đối số được sử dụng cho lệnh gọi phương thức ban đầu sang phương thức mới , bao gồm các đối số từ khóa &một khối nếu được cung cấp.

Đây là một ví dụ :

def puts(*)
  super
end

puts 1, 2, 3

Phương thức này, được định nghĩa bên ngoài bất kỳ lớp nào, sẽ thuộc về Object . Điều này có nghĩa là nó sẽ được gọi trước khi puts ban đầu phương pháp.

Bây giờ:

Khi bạn gọi puts bạn đang gọi phương thức mới này mà chúng tôi đã tạo, sau đó sử dụng super để gọi puts ban đầu .

Khi nào sử dụng Super vs Super ()

Chúng tôi vừa xem xét cách sử dụng super để gọi các phương thức cha.

Nhưng điều gì sẽ xảy ra nếu phương thức gốc không nhận cùng một số đối số?

Trong trường hợp đó, bạn có thể sử dụng:

  • super() không có đối số
  • super(arg1, arg2, ...) để chọn đối số bạn muốn chuyển

Ví dụ :

def puts
  super()
end

Lưu ý cách dấu ngoặc đơn có ý nghĩa đặc biệt ở đây , không giống như một cuộc gọi phương thức thông thường.

Một số điều cần biết thêm về super :

  • Nó chỉ có thể được sử dụng bên trong một phương thức
  • Nó trả về kết quả từ việc gọi phương thức mẹ
  • Nó có thể được gọi nhiều lần

Dòng được in đậm (super trả về kết quả) là chìa khóa để hiểu một số cách sử dụng của super mà bạn có thể tìm thấy trong tự nhiên.

Bạn có thể sử dụng super để triển khai mẫu trang trí hoặc nếu bạn gọi nó bên trong initialize nó có thể được sử dụng để khởi tạo các biến cá thể trên lớp cha.

Tóm tắt

Bạn đã tìm hiểu về từ khóa Ruby super , nó là gì và nó hoạt động như thế nào trong các tình huống khác nhau!

Nếu bạn thích bài viết này, bạn có thể muốn đăng ký nhận bản tin RubyGuides để nhận thêm nội dung như thế này và các mẹo Ruby hữu ích khác chỉ dành cho người đăng ký.