2022-01-01から1年間の記事一覧

Rubyの定数の探索順序

Ruby技術者認定試験の勉強のため、この機会にちゃんと理解しておく。 バージョン $ ruby --version ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21] 継承 子クラスに定数がない場合、親クラスの定数を参照できる。 class A FOO = "foo" BA…

Rubyのフリップフロップ (flip-flop) 構文

Ruby技術者認定試験の勉強をしていて、初めて知った機能だったのでまとめておく。 Ruby長年やってるけど、条件式の範囲式とか初めて見た。5.times { (_1==2)..(_1==3) ? p(_1) : 0 } みたいなやつ。— 神速 (@sinsoku_listy) 2022年10月6日 公式ドキュメント …

Ruby 3.1.xだと継承ツリーに後からincludeでモジュールを追加できる

Ruby技術者認定試験Goldの勉強をしていてRubyのバージョンによって変わっている挙動を知ったのでメモ。 検証コード module M1 def method_1 __method__ end end class C include M1 end p C.new.method_1 module M2 def method_2 __method__ end end module …

Rubyのensure節の挙動

Ruby技術者認定試験の対象バージョンがRuby 3.1.xになったので、試験勉強していて気づいた挙動をブログにメモっておく。 ensure節の値は無視される ensure 節が存在する時は begin 式を終了する直前に必ず ensure 節の本体を評価します。 begin式全体の評価…

Rubyで1つのインスタンスに同名メソッドを複数保つ方法

きっかけ Swiftでprotocolの実装を複数持てるのは便利そうだなぁと思ったことある。(foo as A).call だとA#call で、(foo as B).callだとB#callが呼べる的な #fukabori_rubykaigi_2022— 神速 (@sinsoku_listy) 2022年10月5日 よく考えたら as メソッドを…

RubyのModule#includeで引数を複数指定すると逆順で追加される

Module#include は引数に複数のモジュールを受け取ることができる。 しかし、以下のサンプルコードで分かるように、モジュールの順序は3行で書いたものと逆になるので注意がいる。 module A; end module B; end module C; end class Foo include A include B…

課題管理に対する考え方とテンプレ

自分の中の課題管理に対する考え方を整理するため、ブログにまとめておく。 課題を管理する ソフトウェア開発ではGitHub IssueやRedmineなどで課題を管理する。 基本的に「課題を登録する量 >> 完了する量」であり、多くの課題が登録されるため、優先度をつ…

RustでRubyのgemを書く part2

RustでRubyのgemを書く part1 の続き。 クラスやインスタンス変数を使うメソッドを実装したので、まとめておく。 Rubyで実装したいコードのイメージ module Wasabi class Object def initialize(name) @name = name end attr_reader :name def say "say, #{n…

RustでRubyのgemを書く part1

RubyGems 3.3.11でRust拡張の対応が実験的に入ったので、少し触ってみたメモ。 In particular, it includes experimental supppot for Rust extensions. 引用: https://blog.rubygems.org/2022/04/07/3.3.11-released.html wasabi 2019年に鹿児島Ruby会議01…

RailsアプリをRBS + Steepで型チェックするまでの手順

rails new してから steep check が通るまでにやってみた作業をまとめておく。 GitHub コードはGitHubで公開しているので、詳細な手順を知りたい方は参照してください。 github.com 手順 gemを入れる steepとrbs_railsをGemfileに追加する。 # Gemfile group…

ディレクトリ構造にあわせてrbsのプロトタイプを生成するシェル

既存のリポジトリでrbsをゼロから書くのは大変なので、とりあえず雑にプロトタイプを生成する方法。 ディレクトリ構造 app 以下のディレクトリ構造にあわせて sig にrbsを置くディレクトリ構成です。 app/models/user.rb sig/app/models/user.rbs シェル fin…