By default, an augmentation is only visible from its defining module.
Augmentations are clear and explicit as they only affect the instances from which you have decided to make them visible.
It is advised to place reusable augmentations in separate module definitions. Then, a module that needs such augmentations can make them available through imports.
Suppose that you want to define augmentations for dealing with URLs from strings. You could define a
string-url-augmentations.golo
module source as follows:
module my.StringUrlAugmentations import java.net augment java.lang.String { function toURL = |this| -> URL(this) function httpGet = |this| { # Open the URL, get a connection, grab the body as a string, etc # (...) } # (...) }
Then, a module willing to take advantage of those augmentations can simply import their defining module:
module my.App import my.StringUrlAugmentations function googPageBody = -> "http://www.google.com/": httpGet()
As a matter of style, we suggest that your module names end with Augmentations
. Because importing a
module imports all of its augmentation definitions, we suggest that you modularize them with fine
taste (for what it means).