This can be very handy when just using Lua from the Update() function, so it will not attempt to do anything after the error is raised by assert() and will just gracefully exit.
However, this can cause Lua to "flood the log" when used with Inline Lua, which is going to be hitting the Lua every time the inline call is made. When you use Inline Lua in a String meter, this is going to be once on every skin update, or by default once a second.
The assert() function will immediately bail out of the entire script after writing the log error, with no opportunity to react in any other way in the Lua. It's going to do that each and every time the script function is called.
The error string parameter on assert() is optional, so you don't have to have it write to the log, but that's going to be all or nothing. It will either never write to the log, or always write to the log. Neither is probably optimal.
A better alternative is something like this:
Skin:
Code: Select all
[Rainmeter]
Update=1000
DynamicWindowSize=1
AccurateText=1
[Variables]
[Lua]
Measure=Script
ScriptFile=#CURRENTPATH#Test.lua
Disabled=1
[MeterTest]
Meter=String
FontSize=12
FontWeight=400
FontColor=255,255,255,255
SolidColor=47,47,47,255
Padding=5,5,5,5
AntiAlias=1
;Text=[&Lua:TestError('A string value')
Text=[&Lua:TestError(1234)]
DynamicVariables=1
Code: Select all
function TestError(arg)
-- This would replace:
-- assert(type(arg) == 'string', 'TestError: Argument is not a string value')
if type(arg) ~= 'string' then
if not floodFlag then
print('TestError: Argument is not a string value')
floodFlag = true
end
return
else
floodFlag = false
end
return 'Success! The value of arg is '..arg
end
So this results in a behavior very similar to how IfCondition in Rainmeter works, The IfTrueAction only takes place if the test CHANGES from "false" to "true", and does not if the test REMAINS "true" on subsequent updates.
This will work with any condition you want to test for "failure". I used the type() function as an example, as that might be a pretty common test you want to make. You could test for missing values with 'nil', or values out of some range you desire, or any other test for failure.