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
.
我应该为 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
.