Ngoài tất cả self.class.send :method, args...
, tất nhiên. Tôi muốn tạo ra một phương thức khá phức tạp có sẵn ở cả cấp độ lớp và thể hiện mà không cần sao chép mã.Có cách nào để gọi một phương thức Class riêng tư từ một cá thể trong Ruby không?
UPDATE:
@ Jonathan Branam: đó là giả định của tôi, nhưng tôi muốn chắc chắn rằng không ai khác đã tìm thấy một con đường xung quanh. Khả năng hiển thị trong Ruby rất khác so với trong Java. Bạn cũng có hoàn toàn đúng rằng private
không hoạt động trên phương pháp lớp học, mặc dù điều này sẽ khai báo một phương thức lớp riêng:
class Foo
class <<self
private
def bar
puts 'bar'
end
end
end
Foo.bar
# => NoMethodError: private method 'bar' called for Foo:Class
Nhận lỗi cho ví dụ đầu tiên: '1.9.3p327: 078> f = Foo.new => # 1.9.3p327: 079> f.class.send: calling_private_method NoMethodError: phương thức chưa xác định \ call_private_method 'cho Foo: Class từ (irb) : 79 từ ~/.rvm/rubies/ruby-1.9.3-p327/bin/irb: 16: in \ ' '' –
TrinitronX
Vâng, tính năng này không hoạt động (hoặc có thể không còn hoạt động). –
Đã có lỗi đánh máy - cập nhật mã của tôi @JacobCrofts – metakungfu