Skip to content

Latest commit

 

History

History
161 lines (103 loc) · 7.4 KB

class_expression.rst

File metadata and controls

161 lines (103 loc) · 7.4 KB
github_url:hide

Expression

Inherits: :ref:`RefCounted<class_RefCounted>` < :ref:`Object<class_Object>`

A class that stores an expression you can execute.

.. rst-class:: classref-introduction-group

Description

An expression can be made of any arithmetic operation, built-in math function call, method call of a passed instance, or built-in type construction call.

An example expression text using the built-in math functions could be sqrt(pow(3, 2) + pow(4, 2)).

In the following example we use a :ref:`LineEdit<class_LineEdit>` node to write our expression and show the result.

.. tabs::

 .. code-tab:: gdscript

    var expression = Expression.new()

    func _ready():
        $LineEdit.text_submitted.connect(self._on_text_submitted)

    func _on_text_submitted(command):
        var error = expression.parse(command)
        if error != OK:
            print(expression.get_error_text())
            return
        var result = expression.execute()
        if not expression.has_execute_failed():
            $LineEdit.text = str(result)

 .. code-tab:: csharp

    private Expression _expression = new Expression();

    public override void _Ready()
    {
        GetNode<LineEdit>("LineEdit").TextSubmitted += OnTextEntered;
    }

    private void OnTextEntered(string command)
    {
        Error error = _expression.Parse(command);
        if (error != Error.Ok)
        {
            GD.Print(_expression.GetErrorText());
            return;
        }
        Variant result = _expression.Execute();
        if (!_expression.HasExecuteFailed())
        {
            GetNode<LineEdit>("LineEdit").Text = result.ToString();
        }
    }



.. rst-class:: classref-introduction-group

Tutorials

.. rst-class:: classref-reftable-group

Methods

:ref:`Variant<class_Variant>` :ref:`execute<class_Expression_method_execute>` ( :ref:`Array<class_Array>` inputs=[], :ref:`Object<class_Object>` base_instance=null, :ref:`bool<class_bool>` show_error=true, :ref:`bool<class_bool>` const_calls_only=false )
:ref:`String<class_String>` :ref:`get_error_text<class_Expression_method_get_error_text>` ( ) |const|
:ref:`bool<class_bool>` :ref:`has_execute_failed<class_Expression_method_has_execute_failed>` ( ) |const|
:ref:`Error<enum_@GlobalScope_Error>` :ref:`parse<class_Expression_method_parse>` ( :ref:`String<class_String>` expression, :ref:`PackedStringArray<class_PackedStringArray>` input_names=PackedStringArray() )
.. rst-class:: classref-section-separator


.. rst-class:: classref-descriptions-group

Method Descriptions

.. rst-class:: classref-method

:ref:`Variant<class_Variant>` execute ( :ref:`Array<class_Array>` inputs=[], :ref:`Object<class_Object>` base_instance=null, :ref:`bool<class_bool>` show_error=true, :ref:`bool<class_bool>` const_calls_only=false )

Executes the expression that was previously parsed by :ref:`parse<class_Expression_method_parse>` and returns the result. Before you use the returned object, you should check if the method failed by calling :ref:`has_execute_failed<class_Expression_method_has_execute_failed>`.

If you defined input variables in :ref:`parse<class_Expression_method_parse>`, you can specify their values in the inputs array, in the same order.

.. rst-class:: classref-item-separator


.. rst-class:: classref-method

:ref:`String<class_String>` get_error_text ( ) |const|

Returns the error text if :ref:`parse<class_Expression_method_parse>` or :ref:`execute<class_Expression_method_execute>` has failed.

.. rst-class:: classref-item-separator


.. rst-class:: classref-method

:ref:`bool<class_bool>` has_execute_failed ( ) |const|

Returns true if :ref:`execute<class_Expression_method_execute>` has failed.

.. rst-class:: classref-item-separator


.. rst-class:: classref-method

:ref:`Error<enum_@GlobalScope_Error>` parse ( :ref:`String<class_String>` expression, :ref:`PackedStringArray<class_PackedStringArray>` input_names=PackedStringArray() )

Parses the expression and returns an :ref:`Error<enum_@GlobalScope_Error>` code.

You can optionally specify names of variables that may appear in the expression with input_names, so that you can bind them when it gets executed.