はじめる! Squirrel 第5章 関数

  • 関数は「ファーストクラスの値」(Squirrel の公式ドキュメントより)
    • 「配列を内部に保持することができ」という部分はどういう意味でしょうか
  • 「関数は Squirrel 上で、もしくは ANSI C の関数呼び出し規約をもつネイティブコードとして実装することができる」このあたりが組み込み用言語たる所以でしょうか
    • 本章では Squirrel で実装するほうに集中
function 関数名 (引数リスト)
{
  /* 関数本体 */
}

どうも Squirrel では開き括弧の前には空白を入れるのが慣習みたいですね

  • 関数の呼び出しでは宣言と引数の数が一致しないといけない
  • return 文を省略すると null がかえる
  • 関数は再定義できる。名前だけで区別され引数の数の異なる複数の同名の関数は共存できない(オーバーロードできない)。関数の名前空間は?
  • デフォルト引数を指定できる
  • 可変個引数k - 引数リストの末尾に "..." を書く。vargc, vargs で受け取れる
  • 末尾再帰の最適化が行われる

関数がファーストクラスの値であるということは、関数をオブジェクトとして参照できるということなのでしょうけど(実際 sq コマンドで試してみたところ、関数名を引数リストの括弧をつけずに評価すると関数が取れ、それを変数に代入したり、括弧をつけて呼び出すことができました。また function に名前を渡さずに定義して無名関数みたいなものも作れるようです)、その点については説明がなかったですね。また名前空間についても言及がなかったので関数名のスコープがどうなのかも気になります。とりあえず関数内関数はできない(function 定義内で function 文で関数定義はできるけどグローバルに定義されてしまう模様)でした。