Shiika/p
デバッグプリント
Rubyのpは文字列を返す
簡単
長いときに切り詰める、みたいなことが難しい(全部生成してから出力を切り詰めることはできるが、生成しないことができない)
RustのdebugやdisplayはIOをとる
def inspect(io : IO) : Nil
Crystalはメソッドのオーバーロードがあるので、def inspect : String と両立する
Stringを返す方はオーバーライドすべきでない
Crystalはabstractとかないので紳士協定となっている
それはRustもかな
まあオーバーライドしたいこともまれにあるかもしれないしなあ(あるのか?)
てかCrystalは「IO」なんだ。ReadとWriteで分かれてないんだね
それはRubyもそうだが。
code:go
type Reader interface {
Read(p []byte) (n int, err error)
}
io.ReaderはReadメソッドのみを要求する。Readはバッファを受け取り、読み込んだバイト数を返す
[]byteは長さの情報を持っているので、それが上限となる
これをShiikaに転写すると?
名前どうしようかな
ReadableはいいとしてBufReadableは…?BufferedReadableは長い?
Reader, BufReader (Go風)
Read, BufReader (Rust風)
code:sk
module Readable
# 実行効率のことを考えるとさすがにbufを取ったほうがよさそう
# eofの場合Ok(None)が返る
requirement read(buf: MutableString, max_bytes: Int) -> Result<Option<Int>>
end
module Writable
# 失敗したときに何バイト目まで書き込めたかは、Error値に入れる、でいいのかな
requirement write(bytes: String) -> Result<Int>
end
class File
include Readable
def read(max_bytes: Int) -> Result<Option<String>>
...
end
end