Я думаю, что я вижу, как оба ваши вопроса связаны с одной и той же вещью. Вы действительно должны попросили что-то вдоль линий:
Я всегда видел MATLAB функцию, написанную в форме function a=b(x,y)
, однако в последнее время я наткнулся на some code который включал функции в виде function b(x,y)
(например function SetObstacleFilename(self,value)
) .... так что с этим?
Для того, чтобы понять, 2-й тип функций, которые необходимо учитывать объектно-ориентированное программирование (ООП).
Пример кода, который вы нашли, взят из MATLAB class
. Функции, связанные с классом, известны в ООП как «методы», и этот конкретный код на другом языке программирования будет иметь форму функции void
return type.
Теперь рассмотрим термин object
, который относится к экземпляру class
.
Традиционно методы ограничиваются одним выходом. По этой причине некоторые методы предназначены для работы на objects
(фактически pointers
, AKA «передача по ссылке»), так что возврат значения не требуется вообще, потому что входные объекты напрямую обрабатываются. Другие случаи, когда методы не нужны , чтобы вернуть что-либо, могут включать функции, которые имеют некоторую «полезную» функциональность (например, инициализировать что-то, нарисовать что-нибудь, вывести что-то на консоль и т. Д.), Как и упомянутый вами метод self.GenerateObstacles()
).
Что касается других ваших вопросов:
self
в SetObstacleFilename(self,value)
выглядит как экземпляр рассматриваемого класса.
- Обычно для использования методов класса необходимо создать экземпляр объекта с помощью конструктора (который должен быть функцией с с таким же именем класса), если только эти методы не являются
static
.
В заключение - выше приведены только самые фундаментальные основы ООП. Я не буду пытаться научить вас всей ООП Торе, стоя на одной ноге, поэтому я предоставляю некоторые дополнительные материалы ниже, если вы заинтересованы в дальнейшем понимании темы.
Надеюсь, что происходит, сейчас немного яснее!
Вот некоторые ресурсы для вас:
- MATLAB's OOP Manual.
- MATLAB's documentation on OOP.
Я думаю, вам следует отправить 2 разных вопроса. Кроме того, вы можете отформатировать код для вашего первого вопроса, чтобы его более читаемые, пожалуйста? Благодаря! –