LoginSignup
4
3

More than 3 years have passed since last update.

Lua で名前付き関数パラメータ

Posted at

Luaでは「関数のパラメータがテーブルコンストラクター1個の時、関数コールの丸括弧を省略できる」という書式があります。

これはつまり

function f(a)
    for key,val in pairs(a) do
        print(key.."="..val)
    end
end

f( { param1="12345" , param2="abcdef" } )

の関数コール部分を

f{ param="12345" , param2="abcdef" }

と書けることを意味します。これは、ほとんど他の高級言語の名前付きパラメータと同じですね。

これについて、ドキュメントを見ると、関数のパラメータの記載には以下の三種類が許されているようです。

    args ::= ‘(’ [explist] ‘)’
    args ::= tableconstructor
    args ::= LiteralString

どうやら、引数が文字列1個の場合も関数コールの丸括弧を省略できるようです。これはすなわち

require "モジュール名"

で使われている文法です。

この機能、他にも応用が聞きそうです。例えばC++ではワイド文字列を L"..." と表現しますが、Lua でも、ANSI文字列をUnicode文字列へ変換する関数 L を定義してやれば同等のことができそうです。

このように、Lua では文法や機能をいたずらに増やすのではなく、ちょっとしたシンタックスシュガーの追加で少数の機能で多くの表現ができるような工夫が随所に見られます。

こういった工夫が Lua のコンパクトさを実現し、多くの環境で動作する強みにつながっているのではないかと考えられます。

みんなも使おうぜ、Lua

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3