Функция может использовать позиционные аргументы и / или ключевые аргументы .Функция аргументы используются для предоставления функциям значений, разработанных вне самой функции, значений, которые должна знать функция.Для данной функции фактическое значение, назначенное конкретному аргументу, может измениться от одного вызова к следующему.
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 см. В документации* необязательные ключевые аргументы .