我最近遇到了一个问题,我看到错误“太多 C 级别(限制为 200)”。
它到底意味着什么?我该如何防止这种情况发生?
我认为这与循环需求有关,但它指向我的代码中创建类的新实例的一行,如下所示:
Class:new()
Run Code Online (Sandbox Code Playgroud)
至于我的模块,我确实有一些循环需求,但我尝试通过将外部类移动到同一个模块中来修复它们,如下所示:
Class.SubClass = Class:new()
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
更新:
这是我遇到的一个例子:
lua类
local Class = {}
function Class:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
return Class
Run Code Online (Sandbox Code Playgroud)
类/Entity.lua
local Class = require('Class')
local Player = require('classes/Player')
local Entity = Class:new()
function Entity:getPlayer()
return Player:new()
end
return Entity
Run Code Online (Sandbox Code Playgroud)
类/Player.lua
local Class = require('Class')
local Entity = require('classes/Entity')
local Player = Class:new()
function Player:getEntities()
local entities = {}
for i = 1, 100 …Run Code Online (Sandbox Code Playgroud) 根据这个答案,我找到了一种模拟命名导出的好方法:/sf/answers/2688987591/
代码测试.js:
import {someMethod} from './someNamedExports'
export default () => someMethod()
Run Code Online (Sandbox Code Playgroud)
codeToTestSpec.js:
import * as someNamedExports from './someNamedExports'
import codeToTest from './codeToTest
sinon.stub(someNamedExports, 'someMethod')
codeToTest()
someNamedExports.someMethod.should.have.been.called
someNamedExports.someMethod.restore()
Run Code Online (Sandbox Code Playgroud)
这按预期工作。
但是,我似乎遇到了默认导出的问题。这是我尝试过的:
代码测试.js:
import someDefaultExport from './someDefaultExport
export default () => someDefaultExport()
Run Code Online (Sandbox Code Playgroud)
codeToTestSpec.js:
import * as someDefaultExport from './someDefaultExport'
import codeToTest from './codeToTest
sinon.stub(someDefaultExport, 'default')
codeToTest()
someDefaultExport.default.should.have.been.called
someDefaultExport.default.restore()
Run Code Online (Sandbox Code Playgroud)
它似乎没有按预期进行存根,并抱怨尝试恢复时未定义 someDefaultExport.default 。
我错过了什么还是这可能是 sinon 的错误?