Scope/Function names and labels: Difference between revisions
Added Wren
(Added Wren) |
|||
Line 1,029:
The shell does not support the use of arbitrary line labels.
=={{header|Wren}}==
Firstly, Wren doesn't support labels at all.
Secondly, functions (as opposed to methods) are first-class objects and have the same visibility as any other object. In other words, when defined in a particular scope, they are visible from the point of declaration to the end of that scope.
On the other hand, methods are always public members of a class and are visible throughout that class. Although technically a top-level class is visible throughout the module in which its defined, it is null prior to its definition.
The following example illustrates these points.
<lang ecmascript>//func.call() /* invalid, can't call func before its declared */
var func = Fn.new { System.print("func has been called.") }
func.call() // fine
//C.init() /* not OK, as C is null at this point */
class C {
static init() { method() } // fine even though 'method' not yet declared
static method() { System.print("method has been called.") }
}
C.init() // fine</lang>
{{out}}
<pre>
(as it stands)
func has been called.
method has been called.
(with line 1 uncommented)
[./scope_function_names line 3] Error at '}': Variable 'func' referenced before this definition (first use at line 1).
(with only line 7 uncommented)
func has been called.
Null does not implement 'init()'.
[./scope_function_names line 7] in (script)
</pre>
=={{header|zkl}}==
|