如何在 Smalltalk 中比较本地化的字符串?

问题描述

是否可以在某些 Smalltalk 实现中比较本地化的字符串?到目前为止,我遇到的唯一一个是 Pharo 和 GNU ST,它们似乎缺乏这种能力。似乎唯一的可能性是从头开始编写一个 ICU 包装器。 (这远远超出了我的经验。)

我知道这是一个复杂的功能。不幸的是,在任何地方都经常需要它,例如,对网络应用程序中的菜单进行排序。

我的意思是:

'á' > 'a' => true

以及使用比较对字符串数组进行排序的可能性:

#('č' 'ř' 'a' 'r' 'á') asSortedCollection => #('a' 'á' 'č' 'r' 'ř')

解决方法

我不会说其他方言,但 GemStone 确实有这种能力:

topaz 1> run
'á' > 'a'
%
true
topaz 1> run
#('č' 'ř' 'a' 'r' 'á') asSortedCollection printString
%
aSortedCollection( 'a','á','\u010d','r','\u0159')
topaz 1> 

有关详细信息,请参阅 Programmer's Guide

,

从 NativeBoost(Pharo 4 中使用的旧 FFI 样式)转换为 UFFI 应该很简单。代码是on the gemstone repo。最简单的方法是 首先确保您可以在 Launcher 中使用已弃用的版本运行旧的 Pharo 4,并验证它是否适合您。您可能需要安装 32 位库才能工作(或使用类似 32 位虚拟盒映像的东西)。 Pharo 8 中独立于 NativeBoost 负载的包。有一个关于 UFFI 的booklet

,

我会说 Smalltalk/X-jv branch 方言。如果我没记错,Smalltalk/X 本身就是 Unicode。

你的例子自然会给出你的结果。这是来自 Workspace 的直接粘贴(在打印值之间添加一个空格以提高可读性):

'á' > 'a' true.

#('č' 'ř' 'a' 'r' 'á') asSortedCollection SortedCollection('a' 'r' 'á' 'č' 'ř')   

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...