Tôi mới sử dụng Ruby và đến từ thế giới C#. Trong C# nó là hợp pháp để làm những việc như thế này:Gọi phương thức lớp riêng từ phương thức cá nhân
public class Test
{
public void Method()
{
PrivateMethod();
}
private void PrivateMethod()
{
PrivateStaticMethod();
}
private static void PrivateStaticMethod()
{
}
}
Có thể làm điều gì đó tương tự trong Ruby không?
Một chút ngữ cảnh: Tôi có ứng dụng Rails ... Một trong các mô hình có phương pháp riêng tư thiết lập một số phụ thuộc. Có một phương thức lớp tạo ra cá thể khởi tạo của mô hình. Vì lý do kế thừa, có một số trường hợp của mô hình không được khởi tạo chính xác. Tôi đã thêm một phương thức thể hiện khởi tạo các trường hợp 'uninitialized' mà tôi muốn thực hiện cùng một logic khởi tạo. Có cách nào để tránh trùng lặp không?
mẫu:
class MyModel < ActiveRecord::Base
def self.create_instance
model = MyModel.new
model.init_some_dependencies # this fails
model
end
def initialize_instance
// do some other work
other_init
// call private method
init_some_dependencies
end
private
def init_some_dependencies
end
end
tôi đã cố gắng để chuyển đổi phương pháp riêng của tôi để một phương pháp học riêng, nhưng tôi vẫn nhận được một lỗi:
class MyModel < ActiveRecord::Base
def self.create_instance
model = MyModel.new
MyModel.init_some_dependencies_class(model)
model
end
def initialize_instance
# do some other work
other_init
# call private method
init_some_dependencies
end
private
def init_some_dependencies
MyModel.init_some_dependencies_class(self) # now this fails with exception
end
def self.init_some_dependencies_class(model)
# do something with model
end
private_class_method :init_some_dependencies_class
end
Hãy xem một số tài liệu cho điều đó. –
Tôi không biết matz có thể nhìn thấy tương lai! (Gợi ý: Ruby xuất hiện gần một thập kỷ trước khi C#.) Mô hình OO của Ruby được lấy cảm hứng từ Smalltalk, khá xa cả C++ và C# hết mức có thể. –
@ JörgWMittag Ý tôi là, điều quan trọng ở đây không phải là mô hình đối tượng của Ruby từ (của couse tôi biết đó là Smalltalk). Ruby cũng nhận được lợi ích từ chiến lược oo của C++ như các từ khóa 'private' và' public'. –