Ruby 中的枚举器、正则表达式及模式匹配
1. 枚举器与可枚举模块
在 Ruby 中,枚举器(Enumerator)为集合管理和迭代带来了全新的工具。它在概念和技术上与迭代器有所不同,但与其他集合相关技术结合使用时,能发挥极大的作用。
例如,在进行异或操作时,使用两次相同的密钥对字符串进行异或运算,可得到原始字符串,这一过程仅需一个两行的方法,且总共使用了四个枚举器。不过,在实现 String#^ 方法时,要注意编码问题。若使用 UTF - 8 字符串与 ASCII 字符串进行两次异或运算,结果字符串的编码可能变为 ASCII - 8BIT 。为避免此问题,可添加 force_encoding 调用:
bytes.map {|byte| byte ^ kenum.next }.pack("C*").force_encoding(self.encoding)
这样能确保映射生成的字节序列采用原始字符串的编码。
可枚举(Enumerable)模块和枚举器类紧密相关。可枚举模块的实例方法基于 each 方法定义,只要对象能响应 each 方法且类混入了 Enumerable 模块,这些方法就可用于该对象。枚举器则封装了其他对象的迭代过程,将自身的 each 方法绑定到另一个对象的指定方法上,并借此提供完整的可枚举功能。
但需注意,枚举器有时较为
超级会员免费看
订阅专栏 解锁全文
508

被折叠的 条评论
为什么被折叠?



