Smalltalk - 获取字符串的值

时间:2013-06-07 00:59:38

标签: smalltalk

我正在尝试查找字符串的值。 。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.

1 个答案:

答案 0 :(得分:6)

基本上你想要在循环中从字符转换为整数 你也不需要外面的do:

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

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

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

inString asUppercase.

什么都不做。或者更确切地说,它返回字符串的 new 大写版本,然后您不会存储在任何地方。它不会修改inString本身(消息上的'as'前缀提供了一个提示,就像过去时消息名称一样)。 我没有先将整个字符串大写,而是将'asUppercase'消息发送给各个字符,因为我们只需要迭代字符串一次。

相关问题