我已经看过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))
出什么问题了?
答案 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))