Юлия: Как используются ключевые аргументы? - PullRequest
2 голосов
/ 27 сентября 2019

Пожалуйста, объясните "аргументы ключевых слов" и приведите несколько примеров их использования.

1 Ответ

3 голосов
/ 27 сентября 2019

Функция может использовать позиционные аргументы и / или ключевые аргументы .Функция аргументы используются для предоставления функциям значений, разработанных вне самой функции, значений, которые должна знать функция.Для данной функции фактическое значение, назначенное конкретному аргументу, может измениться от одного вызова к следующему.

A позиционный аргумент содержит место для указанного значения по порядковому положению в функциисписок аргументов.Например, x и real, imag являются позиционными аргументами в следующих определениях функций:

  • sqrt(x) = x^0.5
  • complex(real, imag) = real + imag*im

A аргумент ключевого слова содержит место указанного значения по его имени.Последний (самый правый) позиционный аргумент предшествует первому ключевому аргументу.Точка с запятой (;) отмечает начало аргументов ключевого слова, даже если нет позиционных аргументов.Когда используются оба типа аргумента, точка с запятой отделяет позиционный от аргументов ключевого слова.Например, digitcount и digits являются аргументами ключевых слов в этом определении функции:

  • roundedstring(x; digitcount) = string(round(x, digits=digitcount))

Вот пример, который использует только аргументы ключевых слов:

function pathname(; dirpath, filename)
  return joinpath(dirpath, filename)
end

dir_path  = "/home/workfiles"
file_name = "current.txt"

path_name = pathname(dirpath=dir_path, filename=file_name)

# pathname == "/home/workfiles/current.txt"

Вот почти тот же пример, использующий оба вида аргументов:

function pathname(dirpath; filename)
  return joinpath(dirpath, filename)
end

dir_path  = "/home/workfiles"
file_name = "current.txt"

path_name = pathname(dir_path, filename=file_name)

# pathname == "/home/workfiles/current.txt"

Одна из причин использования аргументов ключевого слова:

function copyfile(; source, dest)
   # function body
end

src_pathname = "~/current.txt"
dst_pathname = "/home/workfiles/current.txt"

# now both of these work
copyfile(source = src_pathname, dest = dst_pathname)
copyfile(dest = dst_pathname, source = src_pathname)

Использование аргумента ключевого словачтобы разрешить изменение настройки по умолчанию:

function translate(text; language="en")
   # translation function body
end

Использование аргумента ключевого слова для чего-то:

#=
   If the keyword `language` is not specified
   when calling this function, a error occurs.
=#   

function translate(text; language)
   # translation function body
end

Оба вида аргументов могут иметь значения по умолчанию, которые используются, когда аргумент опускается ввызов функции.Все позиционные аргументы, которые не указывают значение по умолчанию, должны предшествовать всем позиционным аргументам, которые указывают значения по умолчанию.К аргументам ключевых слов предъявляются одинаковые требования, любой со значением по умолчанию должен следовать всем аргументам ключевых слов, которые не указывают значение по умолчанию.

Дополнительные сведения о аргументах ключевых слов и * 1059 см. В документации* необязательные ключевые аргументы .

...