定期ミートアップ 第22回
ClassはModuleか
RubyではClassはModuleの一種ということになっている
メソッドを束ねたもの、というような共通点がある
あとは、名前空間として使えるとか
クラスはインスタンスを作成でき、モジュールはできない
これをRustでモデリングしようと思ったら困った
code:rust
struct SkModule {
fullname: ...,
class_info: Option<ClassInfo>
}
struct ClassInfo {
// クラス固有の情報
}
code:sk
module Enumerable<T>
requirement each(f: Fn1<T, Void>)
def all?(f: Fn1<T, Bool>) -> Bool
# eachを使った定義
end
end
モジュールはMethod requirementを持つが、クラスは持たない
「Class behaves as Module」は偽だなあ
Rubyでもinclude(klass)はエラー
特に参考にした言語があるわけではないとのこと
ということで
ゲームの話がしたかったわけではない
こうなりました
おまけ
traitっぽいものたち
シェルリのtrait/Squeakのtrait/PHPのtrait
Pythonのmixin/Rubyのmodule
Haskellの型クラス
Scalaのtrait/Rustのtrait
大きな違い:メソッドが被ったときにどうするか
定義時に明示的に指定
シェルリのtrait/Squeakのtrait/PHPのtrait
順番で制御
Pythonのmixin/Rubyのmodule
「どっちとして使うか」を指定
Rustのtrait