Lua 言語仕様:可変長引数
2016-04-24 : 
PCクリニック
LuaJIT の FFI 機能を利用するとき、C言語の“ヘッダ”の様な
ffi.cdef[[ double sqrt(double); ]]
と云った定義を行う。
時には、
ffi.cdef[[ void hoge(int,...); ]]
の様なものもある。
これって何?
“可変個数の引数”ですかネ?
取り敢えず「Lua 可変 引数」で検索したら、
「八角研究所」の
高速スクリプト言語「Lua」を始めよう!(3)
が見つかった。
・・・・・
・・・・・
可変引数の利用
関数の引数にデフォルト値を指定することはできませんが、
可変引数を指定することが可能となっています。
可変引数を利用するには、関数定義の引数の最後に「…」と記述します。
そして、省略された引数を使用するところで、「…」を記述します。
-- my_printf を作ってみたそれでは、可変引数を1つずつ順に取り出したい場合などは
function my_printf(fmt,...)
print(fmt:format(...))
end
my_printf("[%s=%s]","neko",30)
どうすれば良いのかと言えば、一度、テーブルコンストラクタで
変数に代入し、これを利用することができます。
-- 可変引数の値を1つずつ表示する方法
function f(...)
n = {...}
for i in pairs(n) do
print(i)
end
end
f(1,2,3)
それで、
「Lua 5.2 リファレンスマニュアル」
の、
「3.4.10 - 関数定義」
を、丁寧に読むと、
・・・・・
・・・・・
関数が呼ばれると、実引数リストは仮引数リストの長さに調節されます。
ただしその関数が 可変長引数関数 である場合は除きます。
可変長引数関数は、仮引数リストの最後の 3 つの
ドット ('...') で表されます。
可変長引数関数では実引数リストを調節しません。
代わりに、追加の引数をすべて集めて、それらを 可変長引数式
を通して関数に提供します。
可変長引数式も 3 つのドットで表されます。
この式の値は、 複数の戻り値を返す関数に似た、
追加の実引数すべてのリストです。
可変長引数式が他の式の中や式リストの途中で使われた場合、
そのリストの戻り値は 1 個に調節されます。
可変長引数式が式リストの最後で使われた場合、
調節は行われません (その最後の式が括弧で囲まれている場合
を除きます)。
・・・・・
・・・・・
どうも、“3つのドット”は 最後 にしか書けないようですネ。
尚、最初の疑問事項は?
英語では、
'variadic'や'varargs'とある。
'variadic'とは「可変長引数」
'varargs'とは“Variable-length arguments”即ち「可変長引数」
でした。
本日はここまで。
Lua ( GSL Shell ) 学習は続く。
見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒


160407
- 関連記事
-
- Carbon for Lua は、イマイチ (2016/05/04)
- Carbon for Lua (2016/05/02)
- GSL Shell 学習:“IUP.lua”モジュール自作 (2016/04/28)
- GSL Shell 学習:IUP で GUI アプリ (2016/04/26)
- Lua 言語仕様:可変長引数 (2016/04/24)
- VCLua:Lua Visual Controls, … library for Windows and … (2016/04/22)
- Lua - dll 連携:コールバック処理 (2016/04/20)
- plotly.js : JavaScript graphing library (2016/04/18)
- Driver Reviver なるソフト (2016/04/16)
スポンサーサイト