Список функций? И для чего это нужно? - PullRequest
0 голосов
/ 05 октября 2019

В этом фрагменте кода он использует список как то, что представляется функцией для захвата функций, созданных перед ним. Не совсем уверен, для чего это хорошо, и как каждая из частей совмещается. Может кто-то уточнить, что это делает.

"Назначение: Кэширование инверсии матрицы Инверсия матрицы обычно является дорогостоящим вычислением, и может быть некоторое преимущество в том, что кэширование инверсии матрицы вместо того, чтобы вычислять ее повторно (естьтакже являются альтернативами инверсии матриц, которые мы здесь не будем обсуждать.) Ваше задание - написать пару функций, которые кэшируют инверсию матрицы.

Напишите следующие функции:

makeCacheMatrix:Эта функция создает специальный «матричный» объект, который может кешировать свои обратные значения. "

makeCacheMatrix <- function(x = matrix()) {
  j <- NULL
  set <- function(y){
  x <<- y
  j <<- NULL
  }
  get <- function()x
  setInverse <- function(inverse) j <<- inverse
  getInverse <- function() j 

  list(set = set, get = get,        #list of functions
  setInverse = setInverse, 
  getInverse = getInverse)
}

1 Ответ

0 голосов
/ 05 октября 2019

Функции set, get, setInverse и getInverse все создаются локально в makeCacheMatrix, а затем возвращаются в результате списка этой функции. Это дает им доступ к локальным переменным в makeCacheMatrix: аргументу x и значению j. (У них также будет доступ друг к другу, но они этого не используют.)

Назначения <<- в некоторых из этих функций не выполняют локальных назначений, они назначают в захваченной среде, котораясодержит локальные переменные.

Это способ иметь постоянные значения в этих функциях. Как сказал комментатор, это похоже на то, что делают многие ООП-системы через объекты и классы, но объект здесь несколько невидим. Вам нужно было бы использовать что-то вроде environment(result$set), чтобы получить доступ к нему, предполагая, что вы только что запустили

result <- makeCacheMatrix(M)

Другое отличие от большинства систем ООП состоит в том, что вообще не существует определения или наследования общего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...