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