💎

Ruby Gold 練習問題1回目の振り返り

2022/02/11に公開

こんにちは。WEBエンジニアのホリさんです。
今回が第4回目の記事です。

概要

Ruby Goldの問題1回目を解いて、初めて知ったことについて共有させていただきます。

-l オプション

-lはファイルはロードするパスを指定するオプションのことです。
機能としては以下があります。

指定したディレクトリは$LOAD_PATH変数($:)に追加される
引数で渡したディレクトリはrequireやlodaメソッドが呼ばれたときに検知される

**params

** paramsは、明示的に定義したもの以外の引数をHashオブジェクトで受け取ることができる

def test(x:, y: 2, params: **)
   puts "#{x},#{y},#{params[:z]}"
end

test x: 1, z: 3

=> "1,2,3"

ancestors

ancestorsは、クラス、モジュールの優先順位で配列に格納される

module test1
end

module test2
end

class Cls1
 include test1
end

class Cls2 < Cls1
 p self.ancestors
 include test2
end


=> [Cls2,Cls1,test1,object,kernel,BasicObject]

using

refineで定義したメソッドを実行するにはusingを指定する必要がある

class Test
  def hoge
     puts "A"
  end
end

module Sample
   refine Test do
    def hoge
      puts "B"
    end
  end
end

test = Test.new
test.hoge
using Sample
test.hoge

=> 
"A" 
"B"

resume

resumeメソッドはインスタンスを生成したあとにクラス.yieldで定義した引数の値を返します。

test = Test.new{ Test.yield "foo" }
puts f.resume
=> "foo"

dataメソッド

<<  1ヶ月後
>>   1ヶ月後
+ 1日後
- 1日前
require "data"

date = Data.new(2000, 10, 10)
puts date << 1
=> 2000-11-10

まとめ

標準添付ライブラリの知識が不足していたことに気づきました。
現場で使うことがあるか分からないけど、選択肢を増やしておくと様々なwebアプリケーションに対応できるようになると思うので、日々アップデートしていきます。
なんとなく使っている技術も細かいルールや気をつけるべきポイントを知った上で、使うような癖付けをしていこうと思った。

参考URL

https://docs.ruby-lang.org/ja/latest/method/Module/i/ancestors.html

Discussion