没有重载匹配 'Array(Person)#+' 类型为 Person
no overload matches 'Array(Person)#+' with type Person
所以我刚开始学习 Crystal 因为我喜欢 Ruby 和 C,但我还不能掌握语法。我想我已经很接近了,但我被这个错误困住了。
no overload matches 'Array(Person)#+' with type Person
Overloads are:
- Array(T)#+(other : Array(U))
people += Person.new("Person#{id}")
这是代码。
class Person
def initialize(name : String)
@name = name
@age = 0
end
def name
@name
end
def age
@age
end
end
people = [] of Person
counter = 0
id = 0
loop do
id+=1
people += Person.new("Person#{id}")
counter+=1
break if counter = 5
end
puts(people)
我做错了什么?
提前致谢!
您正在尝试将数组和人物放在一起。但是你可以添加 Array to Array only.
要解决它,你应该使用 Array#<<
,像这样:
people << Person.new("Person#{id}")
注意: 检查你的第 25 行,它应该是 break if counter == 5
我看到你的回答已经回答了,
但由于水晶的威力,我认为值得一提的是,您提供的所有代码也可以写成:
class Person
getter name, age = 0
def initialize(@name : String); end
end
puts Array.new(5) { |i| Person.new("Person#{i + 1}") }
很棒吧? :D
getter
是在Object
class中定义的宏,它是每个class.
的超class
和
def initialize(@name)
end
和写作一样
def initialize(name)
@name = name
end
还有这条简洁的小线:
Array.new(5) { |i| Person.new("Person#{i + 1}") }
Array.new(5)
创建一个空数组,并生成从 0 开始(包括 0)到 5(不包括 5)的每个整数。因此,先前传递的数字的空数组索引被分配给值 return 被阻止。
所以我们在块中创建一个索引加1的人,由于块中的最后一个值变成return值,除非使用return
,i
的数组索引' s值变成新人
是否写
def initialize(@name); end
或
def initialize(@name)
end
只是您的个人喜好
所以我刚开始学习 Crystal 因为我喜欢 Ruby 和 C,但我还不能掌握语法。我想我已经很接近了,但我被这个错误困住了。
no overload matches 'Array(Person)#+' with type Person
Overloads are:
- Array(T)#+(other : Array(U))
people += Person.new("Person#{id}")
这是代码。
class Person
def initialize(name : String)
@name = name
@age = 0
end
def name
@name
end
def age
@age
end
end
people = [] of Person
counter = 0
id = 0
loop do
id+=1
people += Person.new("Person#{id}")
counter+=1
break if counter = 5
end
puts(people)
我做错了什么? 提前致谢!
您正在尝试将数组和人物放在一起。但是你可以添加 Array to Array only.
要解决它,你应该使用 Array#<<
,像这样:
people << Person.new("Person#{id}")
注意: 检查你的第 25 行,它应该是 break if counter == 5
我看到你的回答已经回答了, 但由于水晶的威力,我认为值得一提的是,您提供的所有代码也可以写成:
class Person
getter name, age = 0
def initialize(@name : String); end
end
puts Array.new(5) { |i| Person.new("Person#{i + 1}") }
很棒吧? :D
getter
是在Object
class中定义的宏,它是每个class.
和
def initialize(@name)
end
和写作一样
def initialize(name)
@name = name
end
还有这条简洁的小线:
Array.new(5) { |i| Person.new("Person#{i + 1}") }
Array.new(5)
创建一个空数组,并生成从 0 开始(包括 0)到 5(不包括 5)的每个整数。因此,先前传递的数字的空数组索引被分配给值 return 被阻止。
所以我们在块中创建一个索引加1的人,由于块中的最后一个值变成return值,除非使用return
,i
的数组索引' s值变成新人
是否写
def initialize(@name); end
或
def initialize(@name)
end
只是您的个人喜好