実現したいこと
そろそろRubyで型をプロジェクトに導入できないかな、と思って触ってみたのですが、
型触って2,3日しての質問です。
大分前に作ったgemに型推論でも入れようかと、
steepとrbsで軽く触ってみて、型定義ファイルを生成して色々回してみたのですが、型推論が上手くいかなかった所です
発生している問題・分からないこと
- sendメソッドで移譲時
- ENV["hoge"]などで環境変数を取った時
こういうのを変数で代入した時に型が消えてしまって、メソッドの返り値が分からなくなったあたりで型推論が出来なくなって作業が止まってしまいました。
該当のソースコード
# ActiveRecordを継承したクラスを動的に作成する # 以下のエラーが発生 # [error] Type `::Class` does not have method `table_name=` # │ Diagnostic ID: Ruby::NoMethod klass = Class.new(ActiveRecord::Base){ |o| o.table_name = table_name }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
軽く考えたのですが、変数代入時に、代入した変数の型をかけないと解決できなそうで、であれば型定義ファイルにメソッドの引数や返り値の型を書いてるだけでは解決しきれないように見えました。
Rubyのいずれかの型推論gemだと、ここの問題を解決して型推論を完結できるものはあるのでしょうか?
補足
特になし
やったことを具体的に書いてください。ちなみにこのコメント欄に書くのではありません。質問文を編集して書いてください。
ruby3.0から導入された静的解析ですか?
「具体的に」とは、「それを読んだ他の人があなたがやったのと同じことを自分の環境で実行して問題を再現できるくらいに」という意味です。やったことを具体的に書いてください。
Class.new(ActiveRecord::Base){ |o| o.table_name = table_name } で
`::Class` does not have method `table_name=` ってことは
rbs の記述でとちったか steep の bugか。。との感。
ところで、
この例って
sendメソッドで移譲時
ENV["hoge"]などで環境変数を取った時
の例ではないですね。
はい、直近で転んでいたところを書き足しただけですので、転んだ各所情報揃えてきます
回答1件
あなたの回答
tips
プレビュー