当我定义一个函数时,我得到:错误意外令牌:(

时间:2019-01-18 04:19:13

标签: crystal-lang

我已经看过Crystal社区,但是我找不到这个问题。

def Twosum(a = [] of Int32, target = 0)

    map = {} of Int32 : Int32

    a.each_index do |i|

        diff = target - a[i]

        if map.key?(diff):

            return [map.fetch(diff), i]

        elsif

            map[a[i]] = i

        end
    end

    return 0`enter code here`

end

a = [1,4,6,3]
target = 7
puts(Twosum(a,target))

出什么问题了?

1 个答案:

答案 0 :(得分:2)

很多问题。您要问的是:Crystal对于案件很自以为是。方法必须以小写开头;您以大写字母开头,而Crystal根本不喜欢。其他一些问题:

  • {} of Int32 : Int32应该使用粗箭头,而不是冒号:{} of Int32 => Int32

  • if语句不以冒号结尾,它不是Python。

  • 没有名为key?的方法;使用has_key?

  • fetch(在当前的Crystal版本中)需要指定默认值的块或第二个参数。如果您不需要指定默认行为(并且不需要,因为您检查密钥是否存在),则可以使用[]

我真的不确定代码打算做什么,因此我无法评论逻辑,语义和样式。但是这是没有语法错误的代码:

def twosum(a = [] of Int32, target = 0)
    map = {} of Int32 => Int32
    a.each_index do |i|
        diff = target - a[i]
        if map.has_key?(diff)
            return [map[diff], i]
        elsif
            map[a[i]] = i
        end
    end
    return 0
end

a = [1, 4, 6, 3]
target = 7
puts(twosum(a, target))