相关疑难解决方法(0)

Ruby的dup和clone方法有什么区别?

Ruby的文档的dup说:

在一般情况下,clonedup可能在派生类不同的语义.虽然clone用于复制对象(包括其内部状态),但dup通常使用后代对象的类来创建新实例.

但是当我做一些测试时,我发现它们实际上是相同的:

class Test
   attr_accessor :x
end

x = Test.new
x.x = 7
y = x.dup
z = x.clone
y.x => 7
z.x => 7
Run Code Online (Sandbox Code Playgroud)

那么这两种方法有什么区别?

ruby clone dup

213
推荐指数
4
解决办法
8万
查看次数

在Ruby中将哈希值设置为另一个哈希值

我想跟踪一些任意命名的字符串的计数,然后将计数重置为零.我的想法是做以下事情:

reset_hash={"string1"=>0,"string2"=>0,"string3"=>0}
=> {"string1"=>0, "string2"=>0, "string3"=>0} 

new_hash = reset_hash
=> {"string1"=>0, "string2"=>0, "string3"=>0} 

new_hash["string1"]=1
new_hash["string3"]=1
new_hash
=> {"string1"=>1, "string2"=>0, "string3"=>1}
Run Code Online (Sandbox Code Playgroud)

...

现在我想将new_hash重置为reset_hash:

new_hash = reset_hash
=> {"string1"=>1, "string2"=>0, "string3"=>1}
reset_hash
=> {"string1"=>1, "string2"=>0, "string3"=>1} 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?似乎reset_hash实际上已设置为new_hash,这与我想要的相反.如何实现所需的行为?

ruby hashtable

5
推荐指数
2
解决办法
1558
查看次数

如何让我的数组只在Ruby中本地操作(在函数内)?

当我运行下面的ruby代码时,为什么我的数组被全局操作?我怎样才能在函数范围内操作数组?

a = [[1,0],[1,1]]

def hasRowsWithOnlyOnes(array)
  array.map { |row|
    return true if row.keep_if{|i| i != 1 } == []
  }
  false;
end

puts a.to_s
puts hasRowsWithOnlyOnes(a)
puts a.to_s
Run Code Online (Sandbox Code Playgroud)

$ ruby test.rb 输出:

[[1, 0], [1, 1]]
true
[[0], []]
Run Code Online (Sandbox Code Playgroud)

我无法让它发挥作用.我甚至试过.select{true}把它分配给一个新名字.范围如何在Ruby for Arrays中运行?仅供参考$ ruby -v:

ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
Run Code Online (Sandbox Code Playgroud)

ruby arrays scope

3
推荐指数
1
解决办法
84
查看次数

Ruby似乎引用了一个变量,而不是应对它的价值

为什么data_dummy哈希中的值会增加?我想用它来启动零值的另一个哈希!

fau[f.label][:hash] = data_dummy #  ==>{"name 1" => 0, "name 2" => 0} but in the second loop it contains data from the first loop e.g. {"name 1" => 2, "name 2" => 0}
Run Code Online (Sandbox Code Playgroud)

当使用字符串而不是变量dummy_data时,代码按预期工作.

fau[f.label][:hash] = {"name 1" => 0, "name 2" => 0} 
Run Code Online (Sandbox Code Playgroud)

我不能这样做因为'名字X'正在改变......

这对我来说很奇怪!

完整的代码

fau = {}
series = []
labels = [{:value => 0, :text => ''}]

data_dummy = {}
source.each do |c|
  data_dummy[c.name] = 0
end
i = 0
data_dummy.each do |k,v|
  i += …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails-3.2

2
推荐指数
1
解决办法
219
查看次数

修改多次出现的哈希

a哈希.s是一个数组,我想a迭代地推送哈希.我们的想法是独立地保留每个迭代推送的哈希值.这是我试过的.

a = {:a=> 1, :b=>2}

s = []
s << a
s << a     # => [{:b=>2, :a=>1}, {:b=>2, :a=>1}]
a[:b] = 3
s          # => [{:b=>3, :a=>1}, {:b=>3, :a=>1}]

t = []
t.push(a)    # => [{:b=>3, :a=>1}]
t.push(a)    # => [{:b=>3, :a=>1}, {:b=>3, :a=>1}]
a[:b] = 4
t            # => [{:b=>4, :a=>1}, {:b=>4, :a=>1}]
Run Code Online (Sandbox Code Playgroud)

上面没有给出解决方案:更改a更改先前推送的数组内元素中的值.推后as两次,我改变了a[:b]23,所有的元素体现了变化.请给我这个建议.

ruby hash mutable

0
推荐指数
1
解决办法
100
查看次数

标签 统计

ruby ×5

arrays ×1

clone ×1

dup ×1

hash ×1

hashtable ×1

mutable ×1

ruby-on-rails-3.2 ×1

scope ×1