作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] Ruby 与 Interface Oriented Design
时间Wed Feb 21 16:23:44 2007
※ 引述《adrianshum (Alien)》之铭言:
: 所以单纯为了达到这个效果, 你只要和 "使用者"
: 协议好中间的 interface 就可以了.
靠着 unit test
: 但如果你想要的是 compile time checking, 那麽
: 我就帮不上忙了 :P 以我所知, 由於 Ruby 是
: Ducking type, 只有到真正跑时才能知道某 object
: 有没有支援某 'interface', 你最多只能在运作
: 是用 respond_to 在 runtime 检查. 这和 Java
: (or C++ or C# etc) 在 compile time 已经能
: "确定" interface 的支援很不同. 但这种又是 strongly-
: typed language 的特徵, 要套在 Ruby 用又好像不太合适.
: Alien
Ruby 也是 strongly-typed, 一般是这样说的
就我所看到的,weakly-typed 通常是指 type 跟 type 间的界线不明确
也就是说,type 跟 type 间经常会发生 implicit conversion
跟 Perl 不熟,不过 Perl 有一个状况个人觉得很可怕
print '123' + 1
这样的结果会是 124
我也不清楚会是 '124' 呢,还是 124
也许这在 Perl 里根本不重要
print '123' + 1 + 1
会是 125
print '123' + 1 . '1'
会是 1241
反之在 Ruby, print '123' + 1 会有错误:can't convert Fixnum into String
一定要这样做:
print '123'.to_i + 1 才可以得到 124
print ('123'.to_i + 1).to_s + '1' 才可以得到 1241
否则会得:String can't be coerced into Fixnum
dynamic typing 本来就不可能做到 compile-time check,
强制要求这点是个不合理的要求。不过我相信 unit test 可以解决
大部份的 check 需求。可能没有 compile-time check 要来得有力,
不过这更强迫 programmer 写下 test case, 也许是好事 :)
(毕竟 test case 还会迫使 programmer 分离模组)
--
『风车』が廻り続ける度に 『美しき』幻想が静かに纺がれ
『焔』の揺らめきの外に 『腕』を伸ばす愚かな者达 -《Roman》5th Story
『宝石』をより多く掴もうと 『朝と夜』の狭间を彷徨い続ける Track 10
『星屑』の砂の煌めきにも 『葡萄酒』の仄甘い陶酔を魅せ 黄昏の贤者
『贤者』が忌避する槛の中から 『伝言』の真意を彼等に问うだろう
『天使』が别れを告げし时 『地平线』は第五の物语を识る
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18
1F:推 adrianshum:谢谢指正 Strongly typed :) 让我再消化一下 :) 02/21 16:40
2F:推 godfat:说真的我都只是凭感觉说的,惭愧没学过 XDb 不用客气 02/21 21:04
4F:→ godfat:上面那网站是 wikipedia 02/21 21:08