Tôi đang cố gắng để có được một kiểu mã hóa Ruby tốt. Để ngăn tình cờ gọi một biến cục bộ có cùng tên, tôi luôn sử dụng self.
nếu thích hợp. Nhưng bây giờ tôi vấp trên này:Gọi phương thức riêng xxx bằng self.xxx() từ bên trong phương thức riêng khác dẫn đến lỗi "phương thức riêng` xxx 'được gọi là "
class MyClass < ActiveRecord::Base
before_validation :sanitize_user_data
private
def sanitize_user_data
self.sanitize_name # with ".self" it's a problem, without it's not!
end
def sanitize_name
unless self.name.nil?
self.name.gsub!(/\s+/, ' ')
self.name.strip!
end
end
end
Kết quả mã trên trong một lỗi
method private
sanitize_name
gọi
nhưng khi tháo self.
và chỉ sử dụng sanitize_name
, nó hoạt động. Tại sao vậy?
Cảm ơn bạn đã giải thích. Tôi sẽ ghi nhớ điều này, nhưng tôi thực sự hiểu nó, tôi sẽ phải đào sâu vào ruột của Ruby, đúng không? –
@JoshuaMuheim Không nhất thiết, nó chỉ là cách thức làm việc riêng tư, bằng cách cấm một người nhận rõ ràng không thể được gọi từ bất cứ nơi nào mà người nhận tiềm ẩn không giống 'self', nó chỉ có tác dụng phụ không may của việc ngăn cản bạn gọi một phương thức riêng với cùng một máy thu rõ ràng như là bộ nhận ngầm. –
Được rồi, điều đó thật thú vị. Cảm ơn rất nhiều vì đã giải thích. :) –