Package org.zkoss.zk.scripting

## Interface HierarchicalAware

- All Known Implementing Classes:
    `BSHInterpreter`

      public interface HierarchicalAware

  An extra interface implemented by an interpreter (`Interpreter`) if it supports the hierarchical scopes.

  By supporting the hierarchical scopes we mean the interpreter associates one interpreter-dependent scope with each ZK's `IdSpace`. And, variables, classes and methods defined in zscript are then stored in an individual scope depending on the scope when calling `Interpreter.interpret(java.lang.String, org.zkoss.zk.ui.ext.Scope)`.

  On the other hand, if the interpreter doesn't support the hierarchical scopes, it maintains only one global scope and all variables, classes and functions are defined in the global scope.

  Author:
    tomyeh
  See Also:
    `Interpreter`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `containsVariable​(Scope scope, java.lang.String name)` | Tests whether a variable defined in this interpreter.
    `Function` | `getFunction​(Scope scope, java.lang.String name, java.lang.Class[] argTypes)` | Returns the method of the specified name defined in this interpreter's scope identified by the specified scope, or null if not defined.
    `java.lang.Object` | `getVariable​(Scope scope, java.lang.String name)` | Returns the value of a variable defined in this interpreter's scope identified by the specified scope.
    `void` | `setVariable​(Scope scope, java.lang.String name, java.lang.Object value)` | Sets the value of a variable to this interpreter's scope identified by the specified scope.
    `void` | `unsetVariable​(Scope scope, java.lang.String name)` | Removes the value of a variable defined in the interpreter's scope identified by the specified scope.

- - ### Method Detail

    - #### containsVariable

          boolean containsVariable​(Scope scope,
                                   java.lang.String name)

      Tests whether a variable defined in this interpreter. Note: it doesn't search the scope (`Scope`).

      It is similar to `Interpreter.containsVariable(java.lang.String)`, except it uses the specified scope as a reference to identify the correct scope for searching the variable.

      Parameters:
        `scope` - the scope used as a reference to identify the correct scope for searching the variable. Note: this method doesn't look for any variable stored in scope.
      Since:
        5.0.0

    - #### getVariable

          java.lang.Object getVariable​(Scope scope,
                                       java.lang.String name)

      Returns the value of a variable defined in this interpreter's scope identified by the specified scope. Note: it doesn't search the specified scope (`Scope`).

      It is similar to `Interpreter.getVariable(java.lang.String)`, except it uses the specified scope as a reference to identify the correct scope for searching the variable.

      Parameters:
        `scope` - the scope used as a reference to identify the correct scope for searching the variable. Note: this method doesn't look for any variable stored in scope.
      Since:
        5.0.0

    - #### setVariable

          void setVariable​(Scope scope,
                           java.lang.String name,
                           java.lang.Object value)

      Sets the value of a variable to this interpreter's scope identified by the specified scope.

      It is similar to `Interpreter.setVariable(java.lang.String, java.lang.Object)`, except it uses the specified scope as a reference to identify the correct scope for storing the variable.

      Parameters:
        `scope` - the scope used as a reference to identify the correct scope for searching the variable. Note: this method doesn't look for any variable stored in scope.
      Since:
        5.0.0

    - #### unsetVariable

          void unsetVariable​(Scope scope,
                             java.lang.String name)

      Removes the value of a variable defined in the interpreter's scope identified by the specified scope.

      It is similar to `Interpreter.unsetVariable(java.lang.String)`, except it uses the specified scope as a reference to identify the correct scope for removing the variable.

      Parameters:
        `scope` - the scope used as a reference to identify the correct scope for searching the variable. Note: this method doesn't look for any variable stored in scope.
      Since:
        5.0.0

    - #### getFunction

          Function getFunction​(Scope scope,
                               java.lang.String name,
                               java.lang.Class[] argTypes)

      Returns the method of the specified name defined in this interpreter's scope identified by the specified scope, or null if not defined.

      It is similar to `Interpreter.getFunction(java.lang.String, java.lang.Class[])`, except it uses the specified scope as a reference to identify the correct scope for searching the variable.

      Parameters:
        `scope` - the scope used as a reference to identify the correct scope for searching the method. Note: this method doesn't look for any variable stored in scope.
        `argTypes` - the list of argument (a.k.a., parameter) types. If null, Class[0] is assumed.
      Since:
        5.0.0