chapter5收获

0 views
Skip to first unread message

hanks

unread,
Apr 8, 2007, 6:56:52 AM4/8/07
to artemis-rails
chapter5: Standard Types

numbers
各种语言里数字都没太多差异,该标准的还是得标准,ruby里的数字无非是可以直接.method这样利用数据:
5.3.class -> Float #在.net里得显示转换下
对于数字一个常用的功能可能就是字符串和数字的互转,.net里是int.Parse(str)
在ruby里则是 Integer(str) ,我自然就想到浮点是Float(str),一测试果然就是,呵呵

strings
脚本语言处理字符串的能力都很强大,比如perl,ruby的自然也很丰富:
比如处理 "hanks DE"这个字符串中的字段内容到两个变量里,我们可以:
name, title = str.split(/ /)
就不用 name = strs[0];title = str.split(/ /)
PS:我喜欢ruby的这种赋值方式,anders啊,记得让C#也可以这样吧
split这个方法可以传递正则式,比起.net里那个呆板的String.Split(char c)强大太多
ruby的所有字符窜处理函数都支持正则式,很是方便。
所有就是squeeze,scan等函数也是很方便

Ranges
我觉得这个语法是最有意思的一个之一
0..9 表示0到9这个范围,0...9表示0到8这个范围,2个点和3个点在于是否包含最大值
同时这个range也是一个对象,(0...3).to_a -> [0,1,2] ,这里的to_a应该就是toarray
('bar'..'bat').to_a -> ["bar", "bas", "bat"]
有意思吧,我们自己的类也可以实现这个功能,只要实现succ and <=>就可以了
class VU
include Comparable
attr :volume
def initialize(volume) # 0..9
@volume = volume
end
def inspect
'#' * @volume
end
# Support for ranges
def <=>(other)
self.volume <=> other.volume
end
def succ
raise(IndexError, "Volume too big") if @volume >= 9
VU.new(@volume.succ)
end
end

思考下其原理,也很简单,把range的第一个对象.succ直到succ =>range的最后一个对象
..和...其实就是一个比较操作返回值的差别判断,呵呵,一切都不神秘了!

既然称之为范围对象,自然有他的一些应用,可以用在条件语句中,也可以使用 === 符号来判断是否包含一个指定的元素

Regular Expressions
这部分内容很多,不过概念和语法和其他语言都没有明显的差异,我也没有仔细看,用到的时候查查规则就知道了,长时间不用又记不住了,在现在每天开发都使
用数据库的情况下,对从文件中解析数据的要求并不高。

Reply all
Reply to author
Forward
0 new messages