Package org.zkoss.zk.scripting

## Interface Interpreter

- All Known Implementing Classes:
    `BSHInterpreter`, `GenericInterpreter`, `GroovyInterpreter`, `JRubyInterpreter`, `JythonInterpreter`, `RhinoInterpreter`

      public interface Interpreter

  Represents an interpreter that can interpret the scripting codes.

  It is easier to implement by extending from `GenericInterpreter`.

  Author:
    tomyeh

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `containsVariable​(java.lang.String name)` | Tests whether the variable is defined in this interpreter.
    `void` | `destroy()` | Called when the interpreter is about to be destroyed.
    `java.lang.Class<?>` | `getClass​(java.lang.String clsnm)` | Returns the class defined in this interpreter, or null if not found.
    `Function` | `getFunction​(java.lang.String name, java.lang.Class[] argTypes)` | Returns the method of the specified name defined in this interpreter, or null if not defined.
    `java.lang.String` | `getLanguage()` | Returns the scripting language this interpreter is associated with.
    `java.lang.Object` | `getNativeInterpreter()` | Returns the native interpreter, or null if not available.
    `Page` | `getOwner()` | Returns the owner of this interpreter.
    `java.lang.Object` | `getVariable​(java.lang.String name)` | Returns the value of a variable defined in this interpreter.
    `void` | `init​(Page owner, java.lang.String zslang)` | Initializes the interpreter.
    `void` | `interpret​(java.lang.String script, Scope scope)` | Evaluates the script against the specified scope.
    `void` | `setVariable​(java.lang.String name, java.lang.Object value)` | Sets the value of a variable to this interpreter, as if they are defined in the interpreter.
    `void` | `unsetVariable​(java.lang.String name)` | Removes the value of a variable defined in this interpreter.

- - ### Method Detail

    - #### init

          void init​(Page owner,
                    java.lang.String zslang)

      Initializes the interpreter. It is called once when the new instance of interpreter is constructed.
      Parameters:
        `zslang` - the language this interpreter is associated with

    - #### destroy

          void destroy()

      Called when the interpreter is about to be destroyed. After called, this interpreter cannot be used again.

    - #### getOwner

          Page getOwner()

      Returns the owner of this interpreter.

    - #### getLanguage

          java.lang.String getLanguage()

      Returns the scripting language this interpreter is associated with.

    - #### getNativeInterpreter

          java.lang.Object getNativeInterpreter()

      Returns the native interpreter, or null if not available. The native interpreter depends on the implementation of an interpreter.
      Since:
        3.0.2

    - #### interpret

          void interpret​(java.lang.String script,
                         Scope scope)

      Evaluates the script against the specified scope.

      Implementation Note:

      1. The implementation has to concatenate the string returned by `LanguageDefinition.getEachTimeScript(java.lang.String)` if not null.
      2. The implementation must use `Scopes.getCurrent(org.zkoss.zk.ui.Page)` to retrieve the current namespace if the comp argument is null.
      Parameters:
        `scope` - the scope as the context to interpret the script. If null, the current scope is assumed. The current scope is `Scopes.getCurrent(org.zkoss.zk.ui.Page)`, which is the event target's scope, if the thread is processing an event. The event target is `Event.getTarget()`. Otherwise, the current scope is the owner page (`getOwner()`.
      Since:
        5.0.0

    - #### getClass

          java.lang.Class<?> getClass​(java.lang.String clsnm)

      Returns the class defined in this interpreter, or null if not found.

    - #### getFunction

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

      Returns the method of the specified name defined in this interpreter, or null if not defined.
      Parameters:
        `argTypes` - the list of argument (a.k.a., parameter) types. If null, Class[0] is assumed.
      Since:
        3.0.0

    - #### containsVariable

          boolean containsVariable​(java.lang.String name)

      Tests whether the variable is defined in this interpreter. Note: it doesn't search the attributes (`Scope`).
      Since:
        2.4.0

    - #### getVariable

          java.lang.Object getVariable​(java.lang.String name)

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

    - #### setVariable

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

      Sets the value of a variable to this interpreter, as if they are defined in the interpreter.

      Note: it is not part of any namespace and it has higher priority if its name conflicts with any variable defined in the namespaces.

    - #### unsetVariable

          void unsetVariable​(java.lang.String name)

      Removes the value of a variable defined in this interpreter.