小编Pud*_*ler的帖子

从5.3开始,Lua format.string不能将float格式化为十进制(%d)

我最近从Lua 5.2.3升级到5.3.1但我注意到string.format如果它尝试格式化float使用我的所有脚本执行开始失败%d

local anExampleString = string.format("Sample Number: %d",10.100000001) -- Fails on 5.3.1, works on 5.2.3
local aWorkingString  = string.format("Sample Number: %.0f",10.100000001) -- Works on 5.3.1
Run Code Online (Sandbox Code Playgroud)

这是设计的吗?我似乎无法在任何地方找到变更记录.

string string.format lua lua-5.3

7
推荐指数
1
解决办法
2015
查看次数

你能在Lua中创建匿名代码块吗?

在诸如C之类的编程语言中,您可以创建一个匿名代码块来将变量的范围限制在块内,可以使用Lua完成相同的操作吗?

如果是这样,以下C代码的Lua等价物是什么?

void function()
{
    {
        int i = 0;
        i = i + 1;
    }

    {
        int i = 10;
        i = i + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

lua anonymous

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

您如何抛出Lua错误?

是否可以从函数抛出Lua错误,以由调用该函数的脚本来处理?

例如,以下内容将在指定的注释处引发错误

local function aSimpleFunction(...)
    string.format(...) -- Error is indicated to be here
end

aSimpleFunction("An example function: %i",nil)
Run Code Online (Sandbox Code Playgroud)

但是我想做的是捕获错误并通过函数调用者抛出自定义错误

local function aSimpleFunction(...)
    if pcall(function(...)
        string.format(...)
    end) == false then
       -- I want to throw a custom error to whatever is making the call to this function
    end

end

aSimpleFunction("An example function: %i",nil) -- Want the error to start unwinding here 
Run Code Online (Sandbox Code Playgroud)

目的是在我的实际用例中,我的功能会更复杂,并且我想提供更有意义的错误消息

error-handling lua throw

4
推荐指数
2
解决办法
7498
查看次数

动态变量在内存不足时释放?

背景

所以前提是我有一个用属性提供数据的类.

class ExampleClass
{
   string _largeCalculatedVariable = null;
   public string largeCalculatedVariable
   {
       get
       {
           if (_largeCalculatedVariable == null)
           {
              _largeCalculatedVariable = LongRunningCalculate();
           }
           return _largeCalculatedVariable
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

该属性隐藏了这样的事实:如果数据尚未生成,则数据可以即时计算数据,但如果之前已经预先计算或计算,则将返回缓存值.

问题

问题是可能会生成一个大的ExampleClass列表,如果我访问largeCalculatedVariable足够的它们,我可能会耗尽内存.既然我可以随时重新计算这个值是否有办法告诉.NET _largeCalculatedVariable何时需要内存?

注意:我有一种感觉,我可能在这里使用错误的设计模式.

.net c# variables memory-management

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

你可以通过过去的EOF来创建未定义的数据吗?

如果您使用fseek超过文件的末尾然后在EOF之后附加数据,那么EOF和您编写的内容之间的数据是否未定义?

例如,在下面的代码中,写入的文件中是否会有10个字节的未定义数据,因为randomLengthPastEOF

unsigned char *someText= "ExampleText";
int length = 11;
int randomLengthPastEOF  = 10;

FILE *output = fopen("/Example/FilePath", "wb");
fseek(input, randomLengthPastEOF ,SEEK_END);
fwrite(someText, 1, length, output);
Run Code Online (Sandbox Code Playgroud)

我找不到任何可能发生的地方的参考,所以我认为它是未定义的.

c c++ fseek fwrite

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