Difference between revisions of "love.filesystem.load"

(Improved example)
Line 25: Line 25:
 
</source>
 
</source>
  
This has the problem of completely halting your lua if there is a syntax error on the loaded file. If you want more robustness, you can surround the chunk with '''pcall''':
+
This bluescreens if there is a syntax error in the loaded file. If you want to continue your game if the file is not valid (for example if you expect it to be written by users), you can protect the calling of the chunk with '''pcall''':
  
 
<source lang="lua">
 
<source lang="lua">
 
chunk = love.filesystem.load( name ) -- load the chunk
 
chunk = love.filesystem.load( name ) -- load the chunk
local result, errMsg = pcall(chunk) -- execute the chunk safely
+
local ok, errMsg = pcall(chunk) -- execute the chunk safely
  
if result == false then -- result will be false if there is an error
+
if not ok then -- will be false if there is an error
 
   print('The following error happened: ' .. tostring(errMsg))
 
   print('The following error happened: ' .. tostring(errMsg))
 
else
 
else
   print('The result of loading is: ' .. tostring(result))
+
   print('The result of loading is: ' .. tostring(errMsg))
 
end
 
end
 
</source>
 
</source>
 
Notice that this code will be confused if the file returns false on purpose. Avoid returning false inside your loaded code.
 
  
 
== See Also ==
 
== See Also ==

Revision as of 18:55, 14 November 2010

Load a file (but not run it)

Function

Synopsis

chunk = love.filesystem.load( name )

Arguments

string name
The name (and path) of the file

Returns

function chunk
The loaded chunk

Example

It is important to note that love.filesystem.load does not invoke the code, it just creates a function (a 'chunk') that will contain the contents of the file inside it. In order to execute the chunk, you have to put () behind it.

Also, it is worth noting that loaded files can return values. For example, the following file:

return 1+1

Will return 2, when called like this:

chunk = love.filesystem.load( name ) -- load the chunk
local result = chunk() -- execute the chunk
print('result: ' .. tostring(result)) -- prints 'result: 2'

This bluescreens if there is a syntax error in the loaded file. If you want to continue your game if the file is not valid (for example if you expect it to be written by users), you can protect the calling of the chunk with pcall:

chunk = love.filesystem.load( name ) -- load the chunk
local ok, errMsg = pcall(chunk) -- execute the chunk safely
 
if not ok then -- will be false if there is an error
  print('The following error happened: ' .. tostring(errMsg))
else
  print('The result of loading is: ' .. tostring(errMsg))
end

See Also