コラッツ予想がとけたらいいな2

自分の考察を書いていきます。

Ruby で型検査

やってみた。
型検査に使う gem が Ruby2.6 を要求しているので、それをインストールする。
Linux(Ubuntu) です。

git

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

.bashrc や .bash_profile などに以下の記述を追加

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

インストール可能な Ruby のバージョンを確認

$ rbenv install -l
$ rbenv install --list-all | grep 2.6

おまじない

$ sudo apt install libssl-dev

インストール

$ CONFIGURE_OPTS='--disable-install-rdoc' rbenv install 2.6.0
$ rbenv global 2.6.0

おまけ

「2.6.0」を「3.0.0-preview1」に変えれば、最新版の Ruby が試せる。

Steep

$ gem install steep

適当に「fizz」というフォルダを作る。
その中に「fizzbuzz.rb」「fizzbuzz.rbs」「Steepfile」を配置する。

fizzbuzz.rb」は以下。普通の FizzBuzz です。

# 単純な REPL ならこれで十分
# $ ruby fizzbuzz.rb
# irb なら
# $ irb
# > load 'fizzbuzz.rb'
# > fizz(50)

def fizz(n)
  (1..n).each{|k|
    if k % 15 == 0
      p "FizzBuzz"
    elsif k % 3 == 0
      p "Fizz"
    elsif k % 5 == 0
      p "Buzz"
    else
      p k
    end
  }
end

# メイン関数としたもの
if __FILE__ == $0
  fizz(50)
end

「Steepfile」は以下。

target :test do
  typing_options :strict
  check "*.rb"
  signature "*.rbs"
end

ひとまず「fizzbuzz.rbs」はカラでやってみる。

なんかでたー
$ steep check
fizzbuzz.rb:11:6: NoMethodError: type=self, method=p (p "FizzBuzz")
fizzbuzz.rb:13:6: NoMethodError: type=self, method=p (p "Fizz")
fizzbuzz.rb:15:6: NoMethodError: type=self, method=p (p "Buzz")
fizzbuzz.rb:17:6: NoMethodError: type=self, method=p (p k)
fizzbuzz.rb:23:15: FallbackAny ($0)
fizzbuzz.rb:24:2: NoMethodError: type=::Object, method=fizz (fizz(50))

今日はここまで。
(続きやらないかも......)


参考記事

Ubuntu で最新版の Ruby をインストール
https://qiita.com/kerupani129/items/77dd1e3390b53f4e97b2
macOSRuby 3.0.0-preview1 をインストール(Homebrew の ruby-build を使わない方法も)
https://qiita.com/scivola/items/ac83d8275ace1b4ed123
Ruby の型関連の情報まとめ
https://qiita.com/natsuokawai/items/6d652e3b72a79e019f22