Import: Difference between revisions

From Kolmafia
Jump to navigation Jump to search
imported>PhilmASTErpLus
Subdirectory stuff. Does a similar logic applies to file_to_map()/map_to_file()? I believe there was a forum discussion about security and preventing KoLmafia from accessing the parent directory.
imported>PhilmASTErpLus
Reworded--automatic "#pragma once" feature is not only important for name collisions, but also for preventing a script from being executed multiple times. Also, it's okay to remove 'Formatting Needed
Line 2: Line 2:
'''import <filename>'''
'''import <filename>'''


'''Import''' is a command that is used to import (hence the name) an entire file's contents into the file in which '''import''' is called. "Nested" imports are possible; a script that is being imported may import another script. If a single file is imported more than once, KoLmafia will automatically avoid function name collisions. Note that when a script that has a <code>main()</code> function is imported into another script with another <code>main()</code> function, only the primary script's <code>main()</code> is executed, and all <code>main()</code> functions from imported scripts will be ignored. However, any of the imported top-level commands will be executed and all of the imported global variables will be accessible to the primary script.
'''Import''' is a command that is used to import (hence the name) an entire file's contents into the file in which '''import''' is called. "Nested" imports are possible; a script that is being imported may import another script. If a single file is imported more than once, KoLmafia will not import that file again. Note that when a script that has a <code>main()</code> function is imported into another script with another <code>main()</code> function, only the primary script's <code>main()</code> is executed, and all <code>main()</code> functions from imported scripts will be ignored. However, any of the imported top-level commands will be executed and all of the imported global variables will be accessible to the primary script. An import can only be used as a top-level command; attempting to import another script inside a closure (e.g. a function or a loop) will result in an error.


Because '''import''' looks inside the /scripts directory and all its subfolders for the given script name, moving your scripts around inside the /scripts directory will not affect other scripts that rely on them. If there are multiple scripts with the same file name, KoLmafia will use the first script found. You can use your OS-specific directory path separators (usually slashes(/) and backslashes(\)) to explicitly '''import''' a script inside a subdirectory.
Because '''import''' looks inside the /scripts directory and all its subfolders for the given script name, moving your scripts around inside the /scripts directory will not affect other scripts that rely on them. If there are multiple scripts with the same file name, KoLmafia will use the first script found. You can use your OS-specific directory path separators (usually slashes(/) and backslashes(\)) to explicitly '''import''' a script inside a subdirectory.
Line 21: Line 21:
# ...
# ...
</syntaxhighlight>}}
</syntaxhighlight>}}
{{Format}}


[[Category:Scripting]]
[[Category:Scripting]]

Revision as of 20:44, 16 September 2010

import <filename>

Import is a command that is used to import (hence the name) an entire file's contents into the file in which import is called. "Nested" imports are possible; a script that is being imported may import another script. If a single file is imported more than once, KoLmafia will not import that file again. Note that when a script that has a main() function is imported into another script with another main() function, only the primary script's main() is executed, and all main() functions from imported scripts will be ignored. However, any of the imported top-level commands will be executed and all of the imported global variables will be accessible to the primary script. An import can only be used as a top-level command; attempting to import another script inside a closure (e.g. a function or a loop) will result in an error.

Because import looks inside the /scripts directory and all its subfolders for the given script name, moving your scripts around inside the /scripts directory will not affect other scripts that rely on them. If there are multiple scripts with the same file name, KoLmafia will use the first script found. You can use your OS-specific directory path separators (usually slashes(/) and backslashes(\)) to explicitly import a script inside a subdirectory.

Example

# snippet from my aftercore.ash file
import <lib/utilities.ash>    // import a utility function library in the scripts/lib/ directory
import <aftercore_config.ash> // import the configuration file (loaded with variables) into the script
import <aftercore_bounty.ash> // import bounty functionality (loaded with functions) into the script

int first_meat = my_meat();
int first_advs = my_adventures();
boolean using_upcs_curr = false;

# ...