Это просто делается путем вызова Object#freeze
в сочетании с Object#dup
. freeze не возвращает замороженную копию, но вместо этого останавливает self
и возвращает self
. Это означает, что без вызова dup вы также не сможете изменить массив внутри класса.
def get_documents
return @documents.dup.freeze
end
Вы также можете использовать только dup , возвращая мелкую копию. Разрешение вызывающей стороне изменять массив без воздействия @documents
.
def get_documents
return @documents.dup
end
Примечание : имейте в виду, что другого способа извлечения массива быть не должно. Ruby всегда возвращает последнее утверждение, сделанное методом. Это означает, что ваш метод DocumentStore#add_document
вернет результат @documents.push(document)
.
Array#push
Append - Добавляет заданный объект (ы) в конец этого массива. Это выражение возвращает сам массив, поэтому несколько добавлений могут быть объединены в цепочку. Смотрите также # pop для получения противоположного эффекта.