mruby の public/private について

最近ちょっとバタバタしていてあまりプライベートに時間を割けませんでしたが、連休に台風接近が重なった事もあり、連休初日だけ出社して残りの二日はお休みを頂きました。ということで、メモ変わりにここのところの事を書き止めておきます。

mruby の public/private について

mrubyではpublic/privateキーワードを言語仕様上で制約しているらしいです。この辺の実装を調べていた時に、Matzさんご本人から教えていただきました。

自分のつぶやきにもあるように、mruby-sirenでShapeクラスのインスタンスをスクリプトサイドから作らせたくなかったので、initializeをprivateにしようとしたんですが、なかなか見付からず…

よくよく調べてみると、既にそういう話が出てきていました。

there a way to create private methods? #1357

機能制限されている詳細な経緯は分からないけれど、コンパクトで軽量なmrubyの方針においてpublic/privateは利用者側の運用に任せても特に差し支えない機能のはずだから入っていないのかもしれません。(間違ってたらご指摘をお願いします…!)

ちなみにmruby-sirenのShapeクラスは、initializeをスクリプト側から呼んだら例外を吐くようにしています。

mirb - Embeddable Interactive Ruby Shell
> s = Shape.new
(mirb):1: private method `new' called for Shape:Class (NoMethodError)
> 

実装はそのままこんな感じです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください