やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

組込ライブラリ(Enumerator::ArithmeticSequence)

 等差数列。

成果物

情報源

 公式ドキュメントからのリンクが間違っていたのでググってURLをゲットした。いいかげんにしろ。

Enumerator::ArithmeticSequence

等差数列を提供するためのクラス。

 Enumrator, Enumerableを継承している。

ArithmeticSequenceオブジェクトは、Numeric#step, Range#step によって生成されます。

メンバ抜粋

インスタンスメソッド

== begin each end exclude_end? first hash inspect last size step

 stepがポイントと思われる。等しい差分をもった数列なのだろう。

 コード例がひとつもない。newメソッドがない。どうやったら生成できるの? どうやって使うの?

Enumerator::ArithmeticSequence.new
#=> undefined method `new' for Enumerator::ArithmeticSequence:Class (NoMethodError)

 eachインスタンスメソッドなのでクラスからは使えないし。

Enumerator::ArithmeticSequence.each{|n| p n}
#=> undefined method `each' for Enumerator::ArithmeticSequence:Class (NoMethodError)

 要約のところに以下のように書いてあった。

ArithmeticSequenceオブジェクトは、Numeric#step, Range#step によって生成されます。

3.step(7) #=> (3.step(7))
3.step(7).class #=> Enumerator::ArithmeticSequence
s = 3.step(7)
p s.step  #=> 1
p s.begin #=> 3
p s.end   #=> 7
p s.first #=> 3
p s.last  #=> 7
p s.size  #=> 5

 今度はstepを変えてみる。

3.step(7,2) #=> (3.step(7))
3.step(7,2).class #=> Enumerator::ArithmeticSequence
s = 3.step(7,2)
p s.step  #=> 2
p s.begin #=> 3
p s.end   #=> 7
p s.first #=> 3
p s.last  #=> 7
p s.size  #=> 3

 begin/firstend/lastはそれぞれ同じく最初と最後の要素を返す。

所感

 Numeric#step, Range#stepが大事。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux