Có thể xác định nhiều hơn một hàm tạo lớp trong Matlab không? Nếu có, làm thế nào?Nhà xây dựng nhiều lớp Matlab
Trả lời
Mỗi lớp có một hàm tạo. Tuy nhiên ... hàm tạo có thể chấp nhận bất kỳ số lượng và loại đối số nào, kể cả các đối số dựa trên varargin
.
Vì vậy, để cung cấp các tùy chọn của một số thứ ba mặc định trong Java bạn có thể viết một cái gì đó như thế này (ví dụ dựa trên java documentation):
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
public Bicycle(int startCadence, int startSpeed) {
gear = 1;
cadence = startCadence;
speed = startSpeed;
}
Trong Matlab bạn có thể viết
methods (Access = public)
function self = Bicycle(varargin)
if nargin>2
gear = varargin{3};
else
gear = 1;
end
cadence = varargin{1};
speed = varargin{2};
end
end
No. Các nhà thầu trong OOP MATLAB rất hạn chế so với các ngôn ngữ khác. Nó không được nêu rõ trong tài liệu AFAIK mà bạn có thể có nhiều nhà xây dựng, nhưng nó đề cập đến hàm tạo của một lớp trong số ít trong suốt tài liệu.
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html
Mỗi lớp chỉ có một nhà xây dựng, và mỗi .m file chỉ có thể chứa một định nghĩa lớp.
Nếu bạn muốn có một lớp với sự khác biệt nhỏ tùy thuộc vào đầu vào, bạn có thể sử dụng các thuộc tính xác định công tắc được nhận dạng bởi các phương thức lớp. Nếu bạn muốn có các lớp khác nhau tùy thuộc vào đầu vào, bạn có thể tạo một hàm generateClass
- chức năng sẽ gọi một hoặc một lớp khác được xác định trong các tệp khác nhau. Tất nhiên, nếu các lớp khác nhau này có nhiều phương thức và thuộc tính phổ biến, bạn có thể tạo cả hai lớp con làm lớp con chung.
Bài đăng tốt ... nhưng lưu ý đến áp phích gốc: Hãy thực sự thực sự cẩn thận với sự thừa kế. Nó cung cấp cho bạn rất nhiều dây để treo chính mình với.Không nghỉ mát với nó nếu bạn chỉ muốn để có một hàm khởi tạo mặc định và các hàm tạo khác có thể khởi tạo các biến. Sử dụng varargin để lấy hàm này – learnvst
Cùng một lớp, chỉ là quá trình khởi tạo là khác nhau.Tôi nghĩ tôi sẽ chuyển tất cả các tham số cần thiết để xây dựng một cá thể theo hai cách này. và một tháng tham số lại sẽ xác định cách xây dựng. Bẩn nhưng nhanh chóng .. buồn, giải pháp của tôi đã nhận được rất dễ hiểu .. xấu hổ trên bạn MATLAB! – bsmca
@bsmca: Bạn luôn có thể định nghĩa các phương thức (tĩnh) thực hiện hai cách khác nhau để xây dựng, và sau đó bạn gọi một trong hai phương thức đó từ hàm tạo chung. Chỉ cần đảm bảo rằng bạn chỉ tạo đối tượng trước hoặc sau, nhưng không phải bên trong các phương thức này. – Jonas
Các câu trả lời của công việc Pursuit, nhưng một người dùng không quen thuộc với hàm này không thể xem có bao nhiêu đối số là cần thiết hoặc những gì họ đang có. Tôi muốn giới thiệu điều này:
methods (Access = public)
function self = Bicycle(startCadence, startSpeed, startGear)
if nargin>2
gear = startGear;
else
gear = 1;
end
cadence = startCadence;
speed = startSpeed;
end
end
Nếu bây giờ bạn có thể nhập "Xe đạp" (và đợi bạn có thể thấy ít nhất ba đối số). 't biết làm thế nào để làm điều này.
Điều đó thực sự có hiệu quả với bạn không? Tôi nhận được một "không đủ đối số đầu vào errror" (MATLAB: minrhs) nếu tôi không cung cấp tất cả các đối số (trên 2014a và b). Điều này dường như làm việc trên "miễn phí" chức năng, nhưng không phải constructors/lớp thành viên. –
- 1. java lớp con: nhiều nhà xây dựng được kế thừa từ lớp cha trừu tượng
- 2. Sử dụng nhiều chuỗi nhà xây dựng cho một chuỗi
- 3. Nhà xây dựng giả lập JMockit
- 4. Mặc định nhà xây dựng trong Java
- 5. trình biên dịch tạo nhà xây dựng
- 6. Nhà xây dựng bản sao Weird
- 7. Scala Nhà xây dựng phụ trợ
- 8. Nhà xây dựng rõ ràng bằng Lombok?
- 9. nhà xây dựng và Thừa kế
- 10. Nhà xây dựng tùy chỉnh Backbone.js?
- 11. Xây dựng lớp ẩn danh
- 12. Xây dựng chức năng biểu tượng piecewise trong Matlab
- 13. Lớp học có CẦN một nhà xây dựng trong Bản đánh máy không?
- 14. Nhà xây dựng Scala có bị trùng lặp không?
- 15. Matlab - xây dựng một ma trận bằng cách hợp nhất cùng một vector thô nhiều lần
- 16. Nhà xây dựng BufferedReader mong đợi một FileReader
- 17. Groovy: nhà xây dựng tham số được đặt tên
- 18. Nhà xây dựng ngầm là gì trên Java
- 19. "Pattern matching" kiểu đại số nhà xây dựng dữ liệu
- 20. Lợi ích của các nhà xây dựng chung
- 21. Vấn đề về nhà xây dựng Javascript khó hiểu
- 22. Chạy một phương pháp sau các nhà xây dựng của bất kỳ lớp được thừa kế
- 23. Một mẫu thiết kế cho các nhà xây dựng
- 24. Nhà cung cấp loại F # Loại rất chậm xây dựng
- 25. java.io.InvalidClassException: không có nhà xây dựng có giá trị
- 26. Thứ tự các nhà xây dựng gọi điện
- 27. Thừa kế bản sao của nhà xây dựng
- 28. Trả lại sớm từ một nhà xây dựng Scala
- 29. các nhà xây dựng bên trong một không gian tên
- 30. Bắt tên lớp của lớp Đầu tư xây dựng
Lưu ý rằng bạn không thể tạo "tự" bên trong câu lệnh if, vì vậy lần đầu tiên bạn gán bất kỳ thứ gì cho "tự" phải đến trước hoặc sau mệnh đề if. – Jonas
đã kết thúc với giải pháp này :) tnx! – bsmca