あなたは簡単に例えばのように、省略記号でタプルを経由して関数に変数の値を(すなわち、非キーワード)を「通常」渡すことができます。タプル
julia> f(x, y, z) = x + y + z;
julia> f(0, 1, 2)
3
julia> varvalues = 0, 1, 2
(0,1,2)
julia> f(varvalues...)
3
しかし、キーワード変数の場合、どのようにキーワードとそれに対応する変数値の両方を変数に渡しますか?例えばのように。 (愚かな例を許す):g
を関数に渡すことができるキーワードをkeywords
と対応する変数の値を持つkeywordvarvalues
:
julia> function g(x, y, z; operation = "add", format = "number")
operation == "add" && format == "number" && return x + y + z
operation == "add" && format == "string" && return string(x + y + z)
operation == "times" && format == "number" && return x * y * z
operation == "times" && format == "string" && return string(x * y * z)
end; # yep, I know this not type-stable
julia> g(0, 1, 2, operation = "times", format = "string")
"0"
julia> g(varvalues..., operation = "times", format = "string") # varvalues = (0,1,2)
"0"
がだから、上記varvalues
と類似の2つの変数を定義したいです。このような何かが、それは動作します:
julia> keywords = :operation, :format
(:operation,:format)
julia> keywordvarvalues = "times", "string"
("times","string")
julia> g(varvalues..., keywords... = keywordvarvalues...)
ERROR: MethodError: no method matching broadcast!...
私はいつもkeywords
とkeywordvarvalues
からこの文字列を作成することができたとします
expressionstring = """g(varvalues..., operation = "times", format = "string")"""
し、それを解析-EVALが、それはありません、prolly悪い習慣ですか?
セミコロンが – tim
は私が望んでいたまさに:)トリックを行います!ありがとうございました。 –