Когда я определил функцию, я получил: ошибка неожиданного токена :( - PullRequest
0 голосов
/ 18 января 2019

Я уже видел сообщество 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 голосов
/ 18 января 2019

много проблем. То, о чем вы спрашиваете: Кристалл очень самоуверен в отношении дела. Методы должны начинаться со строчной буквы; ваш начинается с заглавных букв, что 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))
...