2

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

我的设计是针对总账的——我的账本成员被初始化为ledger := Dictionary new,我曾希望按照以下方式做一些事情:

postTransaction: GLEntry
    ledger at: GLEntry UID put: GLEntry
4

2 回答 2

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

显示在成绩单窗口中。

分享和享受。

于 2013-07-03T03:16:10.300 回答
3

@ctote 如果您尝试使用 raw#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'是一个字符串,因此不能用于索引字符串集合。

于 2013-07-03T18:03:58.657 回答