メソッド定義のデフォルト式はどう実現するのか?

Rubyではメソッドの定義で,仮引数のデフォルト値を与える式も定義することができる.

# この場合はcとdがデフォルト値が与えられた仮引数という
def foo(a, b, c = [], d = {})ことになる
  [a, b, c, d]
end

foo(0, 1, 2, 3)
=> [0, 1, 2, 3]
foo(0, 1, 2)
=> [0, 1, 2, {}]
foo(0, 1)
=> [0, 1, [], {}]

こんな感じ.

で,Cに対するAPIとして,このデフォルト値を実現する方法が提供されているか…

なのだが,素直に可変長引数メソッドとして定義してやって,引数の長さを見て…という感じでやるしか無いのかな…

可変長引数のメソッドとして定義するのならば,例えば:

VALUE foo(int argc, VALUE * argv, VALUE self) {
  /* … */
}

と定義された関数に渡されるargcは,Ruby側からどのように定義されているのかを確認する必要がある.

まぁこれはRubyソースコードを見る前に,実際に試せばいいか.