0

我不想在这里复制整个代码,因为它相当庞大,但这是它的要点:

require 'sinatra'

SOME_DATA = get_hashes_from_db

get '/' do

 # SOME_DATA's hashes are filtered using .delete
 result = process_data SOME_DATA, request

 response.body(JSON.generate(result))
end

每个请求,哈希列表都会根据请求中发送的一些参数进行过滤。SOME_DATA 中存在的一些字段用于此过滤器,但是当需要使用 .delete 将它们发送回以擦除整个密钥时,它们会被剥离。例子:

过滤前:

{'condition' => 'rainy', 'data' => 'get an umbrella!'}

过滤后:

{'data' => 'get an umbrella!'}

现在的问题是:即使传递给函数的原始常量随后被切块并重新分配了十几次,对从原始 STILL 重新分配的变量调用 .delete 方法也会影响原始常量。在请求 1 中,我将拥有 10 个散列,每个散列有 10 个字段。根据请求 2,我将有 10 个哈希,但每个有 2-5 个字段。

我想我和这个人有同样的问题,但是我试过用 .clone 传递它,希望它能解决这个问题,但它没有。

我以前遇到过这个特殊问题,但我认为我从来没有解决过它。为什么即使(在上面的伪代码中)我传递SOME_DATA.clone给它,它仍然会覆盖原始文件process_data

4

1 回答 1

1

尝试这样的事情:

SOME_DATA = get_hashes_from_db.freeze

现在,当某些代码尝试修改时,它会引发异常SOME_DATA

如果get_hashes_from_db返回一个数组或散列,那么你也需要freeze每个数组/散列元素。

于 2013-01-19T21:59:00.087 回答