Функция, в которой количество входов варьируется

В настоящее время я пишу функцию для решения задач оптимизации, когда входные данные меняются:

function solve_problem!(f, x0, lvar, uvar, c, lcon, ucon); #If there are constraints
function solve_problem!(f, x0, lvar, uvar); #If there are no constraints. 

Я решил эту проблему, выполнив следующие действия:

function solve_problem!(f, x0, lvar, uvar, c = 0, lcon = 0, ucon = 0;) 
    if c !=0 
        nlp = ADNLPModel(f_mod, x0, lvar, uvar, c, lcon, ucon);
    else 
        nlp = ADNLPModel(f_mod, x0, lvar, uvar)
    end 
end

Однако есть ли лучший способ сделать это? Это работает, но я не чувствую, что это хорошее кодирование. Спасибо!

Я не могу придумать другой способ сделать это, так как ADNLPModel — это уже существующая функция.

Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
2
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему бы не использовать тот же подход, который уже используется ADNLPModel? Julia - это язык с множественной диспетчеризацией - вы можете и должны иметь одно и то же имя метода, различающееся количеством параметров (и, возможно, также их типами).

function solve_problem!(f, x0, lvar, uvar, c, lcon = 0, ucon = 0) 
    nlp = ADNLPModel(f_mod, x0, lvar, uvar, c, lcon, ucon)
    do_something(nlp)
end
function solve_problem!(f, x0, lvar, uvar) 
    nlp = ADNLPModel(f_mod, x0, lvar, uvar)
    do_something(nlp)
end

Если вы по какой-то причине не смогли использовать множественную отправку и вам все еще нужно проверить назначение параметров, я бы предложил использовать nothing в качестве значения по умолчанию, а не 0.

Спасибо, это было действительно полезно! Я немного красный о многократной отправке

Annaquest 14.02.2023 13:14

Другие вопросы по теме