我想在Crystal lang而不是1d数组中仅转换2d数组。 所以我在下面写下switch语句。
a = [[1,2,3],[11,12,13]]
b = [1,2,3]
class Array
def meow
case self.first
when Array
puts self.transpose
else
puts "OK"
end
end
end
a.meow
b.meow
此代码不起作用。我该如何解决? 这是错误消息。
Error in foo.cr:16: instantiating 'Array(Int32)#meow()'
b.meow
^~~~
in foo.cr:8: instantiating 'Array(Int32)#transpose()'
puts self.transpose
^~~~~~~~~
in /usr/share/crystal/src/array.cr:1642: undefined method 'first' for Int32
return Array(Array(typeof(first.first))).new if empty?
^~~~~
答案 0 :(得分:5)
首先,通常不建议使用标准库中的补丁类型。
通过将数组指定为方法的参数并将类型限制为Array(Array)
,可以相对容易地解决问题。不需要为任何子类型添加细节。
def meow(array : Array(Array))
array.transpose
end
meow [[1, 2, 3], [11, 12, 13]] # => [[1, 11], [2, 12], [3, 13]]
meow [[1, 2, 3], ["a", "b", "c"]] # => [[1, "a"], [2, "b"], [3, "c"]]
您可能不需要接受一维数组的方法,因此meow [1, 2, 3]
将导致编译器错误。
但是可以添加这样的重载:
def meow(array : Array)
"OK"
end
答案 1 :(得分:2)
其中一个解决方案可能就是:
dob = raw_input("Please enter the string ")
if "/" in dob:
print dob.split("/")
else:
print dob.split("\\")