http://learnxinyminutes.com/docs/julia/でジュリアについて読んでいるときに、私はこれに出くわしました:
# You can define functions that take a variable number of
# positional arguments
function varargs(args...)
return args
# use the keyword return to return anywhere in the function
end
# => varargs (generic function with 1 method)
varargs(1,2,3) # => (1,2,3)
# The ... is called a splat.
# We just used it in a function definition.
# It can also be used in a fuction call,
# where it will splat an Array or Tuple's contents into the argument list.
Set([1,2,3]) # => Set{Array{Int64,1}}([1,2,3]) # produces a Set of Arrays
Set([1,2,3]...) # => Set{Int64}(1,2,3) # this is equivalent to Set(1,2,3)
x = (1,2,3) # => (1,2,3)
Set(x) # => Set{(Int64,Int64,Int64)}((1,2,3)) # a Set of Tuples
Set(x...) # => Set{Int64}(2,3,1)
これは完全に良い説明だと確信していますが、主なアイデア/利点を理解できません。
私がこれまでに理解したことから:
- 関数定義でスプラットを使用すると、関数に与えられる入力引数の数がわからないことを指定できます。1 かもしれないし、1000 かもしれません。これの利点は実際にはわかりませんが、少なくとも私は理解しています (私は願っています)これのコンセプト。
- 関数への入力引数としてスプラットを使用すると... 正確には何ですか? そして、なぜ私はそれを使うのですか?配列の内容を引数リストに入力する必要がある場合は、代わりに次の構文を使用します: some_array(:,:) (3D 配列の場合、some_array(:,:,:) などを使用します)。
これが理解できない理由の一部は、タプルと配列の定義に苦労していることだと思います.タプルと配列のデータ型です(Int64はデータ型です)。それともデータ構造で、データ構造とは何ですか? 配列と聞くと、通常は 2D 行列を思い浮かべますが、プログラミングのコンテキストで配列を想像するのに最適な方法ではないでしょうか?
おそらくデータ構造とは何かについての本を一冊書けるだろうし、Google で検索することもできるだろうが、主題を深く理解している人はそれをもっと簡潔に (そしておそらく単純化して) 説明できることがわかった。それでは、ウィキペディアの記事が可能であるとしましょう。