More Related Content
More from Kenta Murata(12)
5分で分かる Measure
- 20. インストール方法
mrkn-macbook:~ root# gem install -r measure
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed measure-0.1.0
1 gem installed
Installing ri documentation for measure-0.1.0...
Installing RDoc documentation for measure-0.1.0...
mrkn-macbook:~ root#
20
- 21. 使い方
mrkn-macbook:~ root# irb
irb(main):001:0> require 'measure'
irb(main):002:0> Measure.define_unit :m, :length
irb(main):003:0> Measure.define_unit :cm, :length
irb(main):004:0> Measure(1, :m)
=> #<Measure:0x57d8c @unit=:m, @value=1>
irb(main):005:0> Measure(1, :cm).to_s
=> "1 [cm]"
21
- 22. 単位変換
irb(main):006:0> Measure.define_conversion :m, :cm => 100
irb(main):007:0> (Measure(1, :m) + Measure(1, :cm)).to_s
=> "1.01 [m]"
irb(main):008:0> Measure.define_unit :in, :length
irb(main):009:0> Measure.define_conversion :in, :cm => 2.54
irb(main):010:0> Measure.define_unit :mm, :length
irb(main):011:0> Measure.define_conversion :m, :mm => 1000
irb(main):012:0> (Measure(210, :mm) - 2*Measure(1, :in)).to_s
=> "159.2 [mm]"
22
- 23. マルチホップ変換
[in] 2.54倍 [cm]
100分の1
2.54分の1
100倍
[m]
1000倍
連結な単位間での 1000倍
相互変換の経路を [mm]
幅優先探索で発見
23
- 25. Proc による単位変換
irb(main):015:0> Measure.define_unit :deg_c, :temperature
irb(main):016:0> Measure.define_unit :deg_f, :temperature
irb(main):017:0> Measure.define_conversion :deg_c, :deg_f
=> lambda {|x| 9.0*x/5.0 + 32 }
irb(main):018:0> Measure.define_conversion :deg_f, :deg_c
=> lambda {|x| 5.0*(x - 32)/9.0 }
irb(main):019:0> Measure.form { -40.deg_c.as_deg_f }.to_s
=> "-40.0 [deg_f]"
25
- 26. 定義済み単位
‣ measure/length を require すると次の単位
が定義され相互変換可能な状態になる
m, meter pt, point, dp, didot_point in, inch
cm, centi_meter bp, big_point ft, feet
mm, milli_meter pc, pica yd, yard
km, kilo_meter aa, angstrom
um, micro_meter au, AU, astronomical_unit
nm, nano_meter ly, light_year
26