Я не нашел объяснения его значения. Получаю рекурсивное определение: «Функция слота возвращает или устанавливает информацию об отдельных слотах объекта»
Это из справки по slot()функции - она не предназначена для документирования того, что такое слот, а только для того, как получить к ним доступ.
Гэвин Симпсон
Ответы:
87
Слоты связаны с объектами S4. Слот можно рассматривать как часть, элемент или «свойство» объекта. Допустим, у вас есть автомобильный объект, тогда у вас могут быть слоты «цена», «количество дверей», «тип двигателя», «пробег».
Здесь цена, количество дверей, тип двигателя и пробег - это слоты S4 класса «Автомобиль». Это банальный пример, на самом деле сами слоты могут быть снова сложными объектами.
или путем создания определенного метода (см. дополнительную документацию).
Подробнее о программировании S4 см. В этом вопросе . Если концепция все еще кажется вам расплывчатой, может помочь общее введение в объектно-ориентированное программирование.
PS: Обратите внимание на разницу с фреймами данных и списками, которые вы используете $для доступа к именованным переменным / элементам.
+1 хороший ответ, Джорис. Возможно, вы захотите добавить пример такого slot(aCar, "price")же другого использования, особенно когда операционист рассматривал slot()функцию
Гэвин Симпсон
Спасибо, ваш ответ был очень полезным !!
user573347
9
А чтобы получить все слоты класса, есть getSlots()или slotNames()их названия.
Laurent
18
Так же, как names(variable)перечисляются все $доступные имена сложной переменной, так и
slotNames(object) перечисляет все слоты объекта.
Очень удобно, чтобы узнать, какие вкусности есть в вашем объекте для вашего удовольствия от просмотра.
В дополнение к ресурсам, на которые указывает @Joris, а также к его собственному ответу, попробуйте прочитать ?Classes, который включает следующее о слотах:
Slots:
The data contained in an object from an S4 class is defined
by the _slots_ in the class definition.
Each slot in an object is a component of the object; like
components (that is, elements) of a list, these may be
extracted and set, using the function ‘slot()’ or more often
the operator ‘"@"’. However, they differ from list
components in important ways. First, slots can only be
referred to by name, not by position, and there is no partial
matching of names as with list elements.
....
Это законный комментарий. Допустим, R полон необычных вариантов дизайна.
King Crimson
Я могу понять странную терминологию для функций, относящихся к 70-м годам, но слотов среди них нет, они были добавлены на самом деле, когда большинство объектно-ориентированных языков отставали от них на десятки лет.
slot()
функции - она не предназначена для документирования того, что такое слот, а только для того, как получить к ним доступ.Ответы:
Слоты связаны с объектами S4. Слот можно рассматривать как часть, элемент или «свойство» объекта. Допустим, у вас есть автомобильный объект, тогда у вас могут быть слоты «цена», «количество дверей», «тип двигателя», «пробег».
Внутри это представляет собой список. Пример :
setClass("Car",representation=representation( price = "numeric", numberDoors="numeric", typeEngine="character", mileage="numeric" )) aCar <- new("Car",price=20000,numberDoors=4,typeEngine="V6",mileage=143) > aCar An object of class "Car" Slot "price": [1] 20000 Slot "numberDoors": [1] 4 Slot "typeEngine": [1] "V6" Slot "mileage": [1] 143
Здесь цена, количество дверей, тип двигателя и пробег - это слоты S4 класса «Автомобиль». Это банальный пример, на самом деле сами слоты могут быть снова сложными объектами.
Доступ к слотам можно получить разными способами:
> aCar@price [1] 20000 > slot(aCar,"typeEngine") [1] "V6"
или путем создания определенного метода (см. дополнительную документацию).
Подробнее о программировании S4 см. В этом вопросе . Если концепция все еще кажется вам расплывчатой, может помочь общее введение в объектно-ориентированное программирование.
PS: Обратите внимание на разницу с фреймами данных и списками, которые вы используете
$
для доступа к именованным переменным / элементам.источник
slot(aCar, "price")
же другого использования, особенно когда операционист рассматривалslot()
функциюgetSlots()
илиslotNames()
их названия.Так же, как
names(variable)
перечисляются все$
доступные имена сложной переменной, так иslotNames(object)
перечисляет все слоты объекта.Очень удобно, чтобы узнать, какие вкусности есть в вашем объекте для вашего удовольствия от просмотра.
источник
В дополнение к ресурсам, на которые указывает @Joris, а также к его собственному ответу, попробуйте прочитать
?Classes
, который включает следующее о слотах:Slots: The data contained in an object from an S4 class is defined by the _slots_ in the class definition. Each slot in an object is a component of the object; like components (that is, elements) of a list, these may be extracted and set, using the function ‘slot()’ or more often the operator ‘"@"’. However, they differ from list components in important ways. First, slots can only be referred to by name, not by position, and there is no partial matching of names as with list elements. ....
источник
Понятия не имею, почему R должен все переопределять. Большинство нормальных языков программирования называют их «свойствами» или «атрибутами».
источник