Да, для этого есть синтаксис.
Это так называемые анонимные функции (хотя вы можете назначить им имя).
Вот несколько способов сделать это.
x -> x^2 + 3x + 9
x -> MOP2(x) # this actually is redundant. Please see the note below
# you can assign anonymous functions a name
costFunc = x -> MOP2(x)
# for multiple arguments
(x, y) -> MOP2(x) + y^2
# for no argument
() -> 99.9
# another syntax
function (x)
MOP2(x)
end
Вот несколько примеров использования.
julia> map(x -> x^2 + 3x + 1, [1, 4, 7, 4])
4-element Array{Int64,1}:
5
29
71
29
julia> map(function (x) x^2 + 3x + 1 end, [1, 4, 7, 4])
4-element Array{Int64,1}:
5
29
71
29
Обратите внимание, что вам не нужно создавать анонимную функцию, такую как x -> MOP2(x)
. Если функция принимает другую функцию, вы можете просто передать MOP2
вместо передачи x -> MOP2(x)
. Вот пример с round
.
julia> A = rand(5, 5);
julia> map(x -> round(x), A)
5×5 Array{Float64,2}:
0.0 1.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0
0.0 0.0 1.0 0.0 1.0
1.0 1.0 1.0 1.0 0.0
0.0 0.0 1.0 1.0 1.0
julia> map(round, rand(5, 5))
5×5 Array{Float64,2}:
0.0 1.0 1.0 0.0 0.0
0.0 1.0 0.0 0.0 1.0
0.0 0.0 1.0 0.0 1.0
1.0 1.0 1.0 1.0 0.0
0.0 0.0 1.0 1.0 1.0
Существует также синтаксис do
при передаче функций в качестве аргументов.
Если вы хотите дать имя своей анонимной функции, вы можете также определить другую функцию, такую как
costFunc(x) = MOP2(x) + sum(x.^2) + 4
и используйте costFunc
позже.
Если вы хотите вызвать функцию с другим именем, вы можете написать
costFunc = MOP2
если оно внутри функции. Иначе. в глобальном масштабе лучше добавить const
перед оператором присваивания.
const constFunc = MOP2
Это важно из соображений стабильности типов.