Smalltalk - 将字母数字作为键的字典等效词?

时间:2013-07-03 03:05:58

标签: smalltalk

是否有一个字母等效词会接受字母数字作为键?花了一些时间在这里让你们帮助分配UUID值,我现在意识到Dictionaries只采用整数。我曾计划使用UUID作为密钥。

我的设计适用于总帐 - 我的分类帐成员初始化为ledger := Dictionary new,我希望按照以下方式执行操作:

postTransaction: GLEntry
    ledger at: GLEntry UID put: GLEntry

2 个答案:

答案 0 :(得分:11)

字典可以使用您喜欢的任何键作为键。在字典中使用字符串键很常见。例如,在Dolphin Smalltalk v6.x中评估以下内容:

d := Dictionary new.

d
  at: 'a' put: 'a string';
  at: 'b' put: 'b string';
  at: 'c' put: 'c string'.

Transcript
  show: (d at: 'a'); cr;
  show: (d at: 'b'); cr;
  show: (d at: 'c'); cr

将导致

a string
b string
c string

显示在Transcript窗口中。

分享并享受。

答案 1 :(得分:3)

@ctote如果您尝试将原始#at#at:put:与除整数之外的任何其他对象一起使用,则会收到该消息。您的问题可能在其他地方,而不是直接与字典。

有趣的是,我们只有一个错误的堆栈跟踪:

Error(Exception)>>signal:
  signalerText: 'only integers should be used as indices'
ByteString(Object)>>error:
  aString: 'only integers should be used as indices'
ByteString(Object)>>errorNonIntegerIndex
ByteString(Object)>>at:
  index: '2'
ByteString>>at:
  index: '2'
  #2: Character`

正如您所看到的,有人试图使用'2'来访问字符串中的字符,这是一个字符串,因此不能用于索引字符串集合。