如何创建一个对象数组,如下面的C ++示例?
Ruby的做法是什么Print print[1000];
?
以下代码是C ++。我只是想知道Ruby是否有实例化类的1000个唯一对象的选项:
class Print
{
public:
Print()
{
static int count = 0;
cout<<"h"<<++count<<endl;
}
};
int main()
{
Print print[1000];
getchar();
return 0;
}
答案 0 :(得分:3)
要获得1000个实例化的字符串副本,我们可以这样做:
collection_of_strings = Array.new(1000, String.new('h'))
print collection_of_strings
这是存储在数组中的相同对象。然后打印出那个阵列。
这种具有给定块的Array.new形式将创建一个单独实例化的对象,但是很多次你给出了参数:
>> collection = Array.new(10) {String.new}
=> ["", "", "", "", "", "", "", "", "", ""]
通过检查数组中每个对象的object_id
来证明。
>> collection.each {|e| puts e.object_id}
85621980
85621970
85621960
85621950
85621940
85621930
85621920
85621910
85621900
85621890
=> ["", "", "", "", "", "", "", "", "", ""]
答案 1 :(得分:3)
鉴于此
“我想count是一个全局变量,输出看起来像:”h0 h1 h2 h3“
以下内容应该有效(详见Array#new
块[1])。它不需要外部变量,块传递数组的索引:
Array.new(1000) {|count| "h#{count}"}
将它们全部放在一个字符串中,尝试:
Array.new(1000) {|count| "h#{count}"}.join(' ')
答案 2 :(得分:0)
要使用Ruby获取该输出,您可以执行:puts (0..999).to_a
。
或者,如果你想要'你可以这样做:(0..999).each {|n| puts "h#{n}"}
答案 3 :(得分:0)
替代ThomasW的回答:
output = []
1000.times do |i| { output << "h#{i}" }
答案 4 :(得分:0)
是的!在将C ++翻译成Ruby时,我想出了这个:
#create dummy class
class Kraken
# equivalent to your C++ static variable which I think
# should be declared outside the constructor
@@count = 0
# increment the count class variable on every
def initialize
@@count = @@count + 1
end
end
# Release the Kraken!
kraken = Array.new(1000) { Kraken.new }