我正在尝试查找字符串的值。 。E.g,:
'abc' == 6 (1+2+3)
但我在下面的'+元素'部分收到错误:
MessageNotUnderstood: Character>>adaptToNumber:andSend:
有人可以帮我一把吗?
wordValue: inString
|value|
inString asUppercase.
value := (inString do: [ :ch | inString inject: (ch asciiValue- 64) into: [ :sum :element | sum + element ]]) asInteger.
^value.
答案 0 :(得分:6)
基本上你想要在循环中从字符转换为整数 你也不需要外面的do:
wordValue: aString
^aString inject: 0 into: [ :sum :ch | sum + (ch asUppercase asciiValue - 64)]
这就是它的全部内容 - 在块中注入0开始(因为这是你的起始总和),然后每次循环时,块将计算总和加上当前字符的“值”。
此外,在您的版本中,您似乎试图将字符串大写 - 但语句
inString asUppercase.
什么都不做。或者更确切地说,它返回字符串的 new 大写版本,然后您不会存储在任何地方。它不会修改inString本身(消息上的'as'前缀提供了一个提示,就像过去时消息名称一样)。 我没有先将整个字符串大写,而是将'asUppercase'消息发送给各个字符,因为我们只需要迭代字符串一次。