Upcoming SlideShare
×

# Measure 単位付き数値ライブラリ

2,954 views

Published on

2 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
2,954
On SlideShare
0
From Embeds
0
Number of Embeds
70
Actions
Shares
0
5
0
Likes
2
Embeds 0
No embeds

No notes for slide

### Measure 単位付き数値ライブラリ

1. 1. Ruby 勉強会@札幌‒09 2008‒08‒23Measure単位付き数値ライブラリ村田 賢太Ruby 札幌
2. 2. 単位付き数値とは？ 2
3. 3. 単位付き数値とは？ 173 [cm] 63 [kg] 376.730 [Ω] 101,325 [Pa] 1.602 10‒19 [C] 2
4. 4. Measure ライブラリ 単位付き数値クラスを提供 異なる単位間の変換を定義可能 単位付き数値の簡易記法を提供 3
5. 5. インストール方法mrkn-macbook:~ root# gem install -r measureBulk updating Gem source index for: http://gems.rubyforge.orgSuccessfully installed measure-0.1.01 gem installedInstalling ri documentation for measure-0.1.0...Installing RDoc documentation for measure-0.1.0...mrkn-macbook:~ root# 4
6. 6. 使い方mrkn-macbook:~ root# irbirb(main):001:0> require measureirb(main):002:0> Measure.define_unit :m, :lengthirb(main):003:0> Measure.define_unit :cm, :lengthirb(main):004:0> Measure(1, :m)=> #<Measure:0x57d8c @unit=:m, @value=1>irb(main):005:0> Measure(1, :cm).to_s=> "1 [cm]" 5
7. 7. 単位変換irb(main):006:0> Measure.define_conversion :m, :cm => 100irb(main):007:0> (Measure(1, :m) + Measure(1, :cm)).to_s=> "1.01 [m]"irb(main):008:0> Measure.define_unit :in, :lengthirb(main):009:0> Measure.define_conversion :in, :cm => 2.54irb(main):010:0> Measure.define_unit :mm, :lengthirb(main):011:0> Measure.define_conversion :m, :mm => 1000irb(main):012:0> (Measure(210, :mm) - 2*Measure(1, :in)).to_s=> "159.2 [mm]" 6
8. 8. マルチホップ変換 [in] 2.54倍 [cm] 100倍 [m] 1000倍 [mm] 7
9. 9. マルチホップ変換 [in] 2.54倍 [cm] 100分の1 2.54分の1 100倍 [m] 1000倍 1000倍 [mm] 7
10. 10. マルチホップ変換 [in] 2.54倍 [cm] 100分の1 2.54分の1 100倍 [m] 1000倍連結な単位間での 1000倍相互変換の経路を [mm]幅優先探索で発見 7
11. 11. 簡易記法irb(main):013:0> require measure/supportirb(main):014:0> Measure.form { 1.m - 1.cm }.to_s=> "0.99 [m]" 8
12. 12. 定義済み単位 measure/length を require すると次の単 位が定義され相互変換可能な状態になるm, meter in, inch pt, point, dp, didot_pointcm, centi_meter ft, feet bp, big_pointmm, milli_meter yd, yard pc, picakm, kilo_meterum, micro_meternm, nano_meter 9
13. 13. 未対応な機能 多次元単位 たとえば 1 [kg m / s2] など 簡易記法なら 1.kg.m.s(‒2) かな？ スケーリング以外の単位変換 [ C] = 5 ([ F] ‒ 32) / 9 など 開発版では対応済み 10
14. 14. Proc による単位変換irb(main):015:0> Measure.define_unit :deg_c, :temperatureirb(main):016:0> Measure.define_unit :deg_f, :temperatureirb(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]" 11
15. 15. Future works スケーリング以外の変換を実装したバージョン をリリースする 定義済み単位を増やす 多次元単位への対応 12