2

我试图找到一个字符串的值。例如,:

'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.
4

1 回答 1

6

基本上你想你的循环中进行从字符到整数的转换你也不需要外部做:

wordValue: aString
  ^aString inject: 0 into: [ :sum :ch | sum + (ch asUppercase asciiValue - 64)]

这就是它的全部内容 - 将 0 注入块开始(因为这是你的起始总和),然后每次循环,块将评估为总和加上当前字符的“值”。

此外,在您的版本中,您似乎试图将字符串大写 - 但语句

inString asUppercase.

什么也没做。或者更确切地说,它返回字符串的大写版本,然后您不会将其存储在任何地方。它不会修改 inString 本身(消息上的“as”前缀提供了一个提示,过去时的消息名称也是如此)。我没有先将整个字符串大写,而是将“asUppercase”消息添加到各个字符,因为这样我们只需要遍历字符串一次。

于 2013-06-07T02:33:47.680 回答