Юлия: Передача аргументов для функции в функцию - PullRequest
0 голосов
/ 20 декабря 2018

Мне было интересно, есть ли у Джулии легко встроенная возможность передавать аргументы, предназначенные для функции в функции?

Например,

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

Итак, для рабочего примера

using Gadfly, Random
Random.seed!(50)
x = randn(10)
y = 10 * x .+ 2 .+ randn(10)/10
function dummy1(x, y; plotOptionsToPass...)
    plot(x = x, y = y, Geom.point, Geom.line; plotOptionsToPass...)
end

И я хочу иметь возможностьпередать все различные типы параметров графика Gadfly, такие как

dummy1(x, y; Theme(panel_fill = nothing))

, чтобы функция dummy1 превратилась во что-то вроде

plot(x = x, y = y, Geom.point, Geom.line; Theme(panel_fill = nothing))

, без необходимости предварительно указывать всетипы опций Gadfly позволяет plot() брать.

1 Ответ

0 голосов
/ 21 декабря 2018

Не уверен, что вы ищете, но, возможно, это поможет увидеть, что вы можете определить новую функцию внутри dummy1 и вернуть ее.Перезапущенная функция будет использовать меньше аргументов.dummy1 становится функцией конструктора для рисования.

function dummy1(;plotOptionsToPass...)
    function foo(x, y) 
        plot(x = x, y = y, Geom.point, Geom.line; plotOptionsToPass...)
    end 
    return foo
end 

# create new drawing function
new_artist = dummy1(Theme(panel_fill = nothing))
# draw something
new_artist(x, y) 
...