我最近从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)
这是设计的吗?我似乎无法在任何地方找到变更记录.
在诸如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错误,以由调用该函数的脚本来处理?
例如,以下内容将在指定的注释处引发错误
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)
目的是在我的实际用例中,我的功能会更复杂,并且我想提供更有意义的错误消息
背景
所以前提是我有一个用属性提供数据的类.
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何时需要内存?
注意:我有一种感觉,我可能在这里使用错误的设计模式.
如果您使用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)
我找不到任何可能发生的地方的参考,所以我认为它是未定义的.