squeak(smalltalk) 如何使用方法`findSubstring: in: startingAt: matchTable:`?

squeak(smalltalk) how to use method `findSubstring: in: startingAt: matchTable:`?

我应该为 matchTable: 选择器发送什么?

在实现中,没有示例和详细解释,所以 如果我将字符串放在 in: 选择器

中,我不明白哪个对象正在接收消息

matchTable: 关键字提供了一种识别字符的方法,使它们在比较时变得相同。参数通常是 256 个条目的 ByteArray,在位置 i 处包含比较时要考虑的第 i 个字符的代码点。

table 的主要用途是实现不区分大小写的搜索,例如 A=a。因此,不是在搜索过程中比较手头的字符,而是在 matchTable 中找到的元素在它们各自的代码点处进行比较。所以,而不是

   (string1 at: i) = (string2 at: j)

测试变成了

   cp1 := string1 basicAt: i.
   cp2 := string2 basicAt: j.
   (table at: cp1) = (table at: cp2).

换句话说,matchTable: 参数用于将实际字符映射到对比较实际重要的字符。

请注意,可以将相同的技术应用于 case-sensitive/insensitive 排序。

最后,请记住,这是非系统程序员很少需要的相当低级的方法。您应该使用更高级别的版本来查找子字符串,例如 findString:startingAt:caseSensitive:,其中最后一个关键字的参数是 Boolean.