【发布时间】:2019-12-21 17:11:43
【问题描述】:
我应该为matchTable: 选择器发送什么?
在实现中,没有例子也没有详细的解释,所以
如果我将字符串放在in: 选择器中,我不明白哪个对象会收到消息
【问题讨论】:
我应该为matchTable: 选择器发送什么?
在实现中,没有例子也没有详细的解释,所以
如果我将字符串放在in: 选择器中,我不明白哪个对象会收到消息
【问题讨论】:
matchTable: 关键字提供了一种识别字符的方法,以便它们在比较中变得等价。参数通常是256 条目中的ByteArray,在位置i 处包含比较时要考虑的ith 字符的代码点。
该表的主要用途是实现不区分大小写的搜索,例如A=a。因此,不是在搜索期间比较手头的字符,而是比较在matchTable 中在它们各自的代码点找到的元素。所以,而不是
(string1 at: i) = (string2 at: j)
测试变成了
cp1 := string1 basicAt: i.
cp2 := string2 basicAt: j.
(table at: cp1) = (table at: cp2).
换句话说,matchTable: 参数用于将实际字符映射到对比较真正重要的字符。
请注意,可以将相同的技术应用于区分大小写/不区分大小写的排序。
最后,请记住,这是一种非系统程序员很少需要的相当低级的方法。您应该使用更高级别的版本来查找子字符串,例如 findString:startingAt:caseSensitive:,其中最后一个关键字的参数是 Boolean。
【讨论】:
'al' 是 'Smalltalk' 的子字符串,出现两次,一次在索引 3 处,另一个在索引 7 处。