Did you know ... Search Documentation:
Pack logtalk -- logtalk-3.85.0/manuals/_sources/libraries/options.rst.txt

.. _library_options:

options

This library provides useful predicates for managing developer tool and application options.

API documentation

Open the `../../docs/library_index.html#options <../../docs/library_index.html#options>`__ file in a web browser.

Loading

To load all entities in this library, load the loader.lgt utility file:

::

| ?- logtalk_load(options(loader)).

Testing

To test this library predicates, load the tester.lgt file:

::

| ?- logtalk_load(options(tester)).

Usage

The options category is usually imported by the root object of the developer tool or application. The importing object should define the default_option/1 predicate and, if option type-checking is required, the valid_option/1 predicate must be defined for each option. This library requires options to be represented by compound terms where the functor is the option name (e.g. trim(true) or (box(0,2))). The option/2-3 can be used to get or test an option given a list of options. When an option appears multiple times in a list, the option/2-3 predicates get or test the first (leftmost) occurrence.

The library also supports a user-defined fix_option/2 predicate. An usage example is when an option value can be a relative file path that should be expanded before used. Another usage example would be converting from a user-friendly option to a form more suitable for internal processing. When a call to the fix_option/2 predicate fails, the option is used as-is.

A simple example:

::

:- object(foo, imports(options)).

:- uses(type, [ valid/2 ]).

:- public(p/0). p :- % use default options p([]).

:- public(p/1). p(UserOptions) :- ^^check_options(UserOptions), % construct the full set of options from % the user options and the default options ^^merge_options(UserOptions, Options), ... % query an option ^^option(baz(Boolean), Options), q(Boolean), ...

default_option(baz(true)). ...

valid_option(baz(Boolean)) :- valid(boolean, Boolean). ...

:- end_object.

Note that you can use protected or private import of the options category if you don't want to add its public predicates to the object protocol.