2016-03-01から1ヶ月間の記事一覧

String -> は Proc(A, B).new では表記できない?

3 記事連続で Crystal。 #on の block の型が String -> なんだけど、戻り値の型が不明?なので、Proc(A, B).new { |x| ... } という Proc の表記では書けないっぽい………。 こういう風に書きたいけど、エラーになる: proc = Proc(String, ).new { |x| hoge = …

Crystal では何でもかんでも配列にしてあれこれするのは良くないぜ!

Rake のコードを Crystal に移植していたら、配列を関数の引数として展開できないせいでまずいことが起こった。 def standard_gazel_options(options) [ [ "-A", "--all", "Show all tasks, even uncommented ones (in combination with -T or -D)", ->(valu…

Crystal の Proc

こういう関数があって: def greeting(&block) yield "Hello, World!" end こんな風に渡すことができるよ: # # 通常通りにブロックを渡す。 greeting { |v| puts v } # # puts を Proc にして渡す。 greeting &->puts(String) # # puts を Proc にしたものを…

YAML でターゲット書くビルドツール gazel とかどうかな

だいぶ前から YAML でビルドスクリプト(?)書いて、ビルドしてくれるツールのことを考えていた。 なんか今日、これだっていうのが浮かんだので書いてみる。 gazel は bazel と似てるけど、名前を忘れていてそれに想起されて思いついた。 とはいえ、例によっ…

構造化プログラミングと脳みそクラッシャー

COBOL は構造化プログラミングが可能な言語として名前が挙げられることが多い。 でも、COBOL が構造化プログラミングできる言語だというのはまったくもって真実ではない。 COBOL の構造化の考え方はこうだ: COBOL には3つの構造化文がある! 曰く、「順次」…

わんおぶ!

こんな風に書くのめんどいよね。 (or (equal? x #\a) (equal? x #\b) (equal? x #\c)) just を書いて…… (define* (just x #:optional (judge? equal?)) (lambda (other) (judge? x other))) one-of をこういう風に書いたら、 (define (one-of . args) (lambd…