- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
行为:Ruby 1.9.2p180 因“非法指令”而失败,没有其他详细信息。 Ruby 1.9.1p378 运行完全没有问题。
失败发生在 pin = fronto.index(k)
行中,仅在某些迭代中发生。
from
和 into
都是对象数组,by
是该对象的属性(x 或 y)。
代码:
def add_from_to_by from, into, by
nto = into.sort_by{|k| k.send(by)}
fronto = (from + nto).sort_by{|k| k.send(by)}
dict = {}
nto.each{|k| dict[k] = []}
nto.each do |k|
pin = fronto.index(k)
up = pin+1
down = pin-1
while up < fronto.length and ((fronto[pin].send(by)) - (fronto[up].send(by))).abs <= $sensor_range
if fronto[up].kind_of?(BasicNode) then
dict[k].push(fronto[up])
end
up += 1
end
while down >= 0 and ((fronto[pin].send(by)) - (fronto[down].send(by))).abs <= $sensor_range
if fronto[down].kind_of?(BasicNode)
dict[k].push(fronto[down])
end
down -= 1
end
end
return dict
end
我在 Mac 10.6.6 上使用 rvm 管理 ruby 版本。知道为什么会这样吗?
修订:
如果上面的代码简化为:
def add_from_to_by from, into, by
nto = into.sort_by{|k| k.send(by)}
fronto = (from + nto).sort_by{|k| k.send(by)}
dict = {}
nto.each{|k| dict[k] = []}
x = nto.select{|k| !fronto.include?(k)}
end
这重现了最后一行的错误。在崩溃的输入中,进出点是不相交的点集。一个应该起作用的类定义是:
class BasicNode
attr_reader :x, :y
def initialize x, y
@x = x
@y = y
end
end
其中 x 和 y 是数字。在崩溃的测试中,into
中有 15 个节点,from
中有 5 个节点。
编辑:
当我稍微隔离代码时,我确实遇到了堆栈级别太深(系统堆栈错误)
。但是,我不确定为什么会这样,因为在此代码或数组索引的 C 实现中没有递归调用。
附录:此问题的完整源代码可在此处找到:http://code.google.com/p/graphcomplexity/
仓库:rvertex分支:默认测试文件:test/test_deeps_hypersim.rb
最佳答案
在 Linux 上使用 1.9.2-p180,我无法重现您的问题。这是我的测试设置:
$sensor_range=5
list1=Array.new(1000) {|i| BasicNode.new(rand(100),rand(100))}
list2=Array.new(1000) {|i| BasicNode.new(rand(100),rand(100))}
res=add_from_to_by(list1,list2,:x);
您的错误是否仍然出现在该组指令中?如果您仍然遇到错误,但没有按照这些说明进行操作,您能否提供一些示例数据和函数调用来演示该问题? (如果它很大,你可以使用像 pastebin.com 这样的服务)
此外,我不是 100% 确定它是否完全相同,但这可能是编写相同函数的更直接的方法(您的程序可能更容易使用更简单的代码进行调试):
def add_from_to_modified(from,into,sensor_range,&block)
into.inject({}) do |result,key|
result.merge({key=>(into+from).select {|check| (yield(check)-yield(key)).abs <= sensor_range}})
end
end
add_from_to_modified(list1,list2,5,&:x)
如果效率太低,可以在循环外用 yield() 重写。此实现还允许您传递任意 block ,而不仅仅是要调用的函数
add_from_to_modified(list1,list2,5) {|node| node.x*3-node.y}
关于Ruby 1.9.2-p-180 失败,返回 'illegal instruction' 或 'stack level too deep (SystemStackError)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386611/
我知道这里有很多系统堆栈错误问题……但每个问题和答案都是独一无二的。还没有找到一个接近我的。 我真的不明白为什么会出现这个错误... 我不需要 View ,因为表单是通过 ajax 发送的。我用 Ra
我想做这个简单的计算,但它提示堆栈不够深,即使对于 n 的非常小的数字(例如 4)也是如此。类似主题的其他 SO 帖子推荐尾递归,但是这在这里不适用,因为您只在达到基本情况时才添加到累积值。 Ruby
我有 Sinatra 应用程序,需要测试我的应用程序。 features/support/env.rb: require_relative "../../application" require "c
我有以下代码: class BookPrice attr_accessor :price def initialize(price) @price = price end de
我正在开发一个 android 应用程序,我需要有一个关于已保存对象的显示 View 的 json 响应。尝试这样做,我收到: "SystemStackError (stack level too d
这是我的代码。 @@inversions = 0 numbers = [very big array] def merge_sort(array) return array if array.si
我正在研究一种新的编程语言 rip ,而且我无法找到一些无限循环的底部。有没有办法在每个规则被调用时打印出来,这样我就可以看到递归的规则?我试过在脑海中遍历代码,但我就是看不到它。任何帮助将不胜感激。
不确定为什么会这样??还是菜鸟.. 我只是在保存记录之前更新 Mine 表中的一个字段。所有变量都被准确地引入了。下面的行也返回了它应该的内容。 CreateFulfillmentService::N
我有很多范围,如果它们重叠,我想合并在一起。我目前使用的方法是使用 Sets。 这是有效的。但是,当我尝试使用如下更大范围的相同代码时,我得到一个“堆栈级别太深(SystemStackError)”。
我尝试解决这个问题http://www.nattee.net/~dae/algo/prob/hw03b_tiling/problem.pdf 所以我使用分而治之的方法来解决它但是当我执行我的程序时我得
所以我正在尝试创建 vagrantfile 循环并为学校项目创建多台机器。 代码是: def slave() slave{i} end Vagrant.configure(2) do |confi
删除记录时出现堆栈溢出错误: SystemStackError (stack level too deep): app/controllers/orders_controller.rb:18:in `
我正在尝试向 Numeric 类添加转换方法,但是当我运行以下代码行时,我得到了 SystemStackError puts 5.dollars.in(:euros) # => 6.5 puts 1
我试图理解为什么将许多(在我的例子中是 130798 个)对象放入数组中会返回 SystemStackError。 big = Array.new(130797, 1) [].push(*big) &
Ruby 在 Cygwin 中的 rails 和 bundler 崩溃。 $ ruby -v ruby 1.9.3p374 (2013-01-15 revision 38858) [i386-cygw
不明白为什么我运行这个程序时堆栈级别太深。 module A class Fruit def initialize puts "pears" end
所以我试图在 ruby 中实现快速排序,但我得到了这个错误 `quicksort': stack level too deep (SystemStackError) def quicksort(a
下面是我的示例代码: def test(v) test(v-1) if v > 0 p v end 如果我调用 test(11893) 它工作正常。如果我有 v > 11893,它会抛出 Sy
当我在程序中对其进行测试时,我的代码将运行,但是当我尝试在该代码上运行Rspec时,它将引发错误 rails--version Rails 5.2.3 ruby --version ruby 2.6.
我有一个表单,当用户在文本字段中输入某些值时,我想自动填充其他字段,但它不断返回 SystemStackError (堆栈级别太深)。这是文件: 路线.rb scope :places, contro
我是一名优秀的程序员,十分优秀!