@@ -728,7 +728,7 @@ that has the same data representation as the input, whereas ``toUFixed256x18`` r
728
728
Function Types
729
729
--------------
730
730
731
- Function types are the types of functions. Variables of function type
731
+ Function types are the types of functions. Variables of a function type
732
732
can be assigned from functions and function parameters of function type
733
733
can be used to pass functions to and return functions from function calls.
734
734
Function types come in two flavours - *internal * and *external * functions:
@@ -743,6 +743,20 @@ contract internally.
743
743
External functions consist of an address and a function signature and they can
744
744
be passed via and returned from external function calls.
745
745
746
+ Note that public functions of the current contract can be used both as an
747
+ internal and as an external function. To use ``f `` as an internal function,
748
+ just use ``f ``, if you want to use its external form, use ``this.f ``.
749
+
750
+ If a function type variable is not initialised, calling it results
751
+ in a :ref: `Panic error<assert-and-require> `. The same happens if you call a function after using ``delete ``
752
+ on it.
753
+
754
+ .. note ::
755
+ Lambda or inline functions are planned but not yet supported.
756
+
757
+ Declaration syntax
758
+ ^^^^^^^^^^^^^^^^^^
759
+
746
760
Function types are notated as follows:
747
761
748
762
.. code-block :: solidity
@@ -759,7 +773,8 @@ omitted. Note that this only applies to function types. Visibility has
759
773
to be specified explicitly for functions defined in contracts, they
760
774
do not have a default.
761
775
762
- Conversions:
776
+ Conversions
777
+ ^^^^^^^^^^^
763
778
764
779
A function type ``A `` is implicitly convertible to a function type ``B `` if and only if
765
780
their parameter types are identical, their return types are identical,
@@ -788,18 +803,10 @@ Which makes it possible to assign a ``payable`` function pointer to a ``non-paya
788
803
function pointer ensuring both types behave the same way, i.e, both cannot be used
789
804
to send ether.
790
805
791
- If a function type variable is not initialised, calling it results
792
- in a :ref: `Panic error<assert-and-require> `. The same happens if you call a function after using ``delete ``
793
- on it.
794
-
795
806
If external function types are used outside of the context of Solidity,
796
807
they are treated as the ``function `` type, which encodes the address
797
808
followed by the function identifier together in a single ``bytes24 `` type.
798
809
799
- Note that public functions of the current contract can be used both as an
800
- internal and as an external function. To use ``f `` as an internal function,
801
- just use ``f ``, if you want to use its external form, use ``this.f ``.
802
-
803
810
A function of an internal type can be assigned to a variable of an internal function type regardless
804
811
of where it is defined.
805
812
This includes private, internal and public functions of both contracts and libraries as well as free
@@ -828,7 +835,8 @@ Libraries are excluded because they require a ``delegatecall`` and use :ref:`a d
828
835
convention for their selectors <library-selectors>`.
829
836
Functions declared in interfaces do not have definitions so pointing at them does not make sense either.
830
837
831
- Members:
838
+ Members
839
+ ^^^^^^^
832
840
833
841
External (or public) functions have the following members:
834
842
@@ -843,6 +851,9 @@ External (or public) functions have the following members:
843
851
respectively. See :ref: `External Function Calls <external-function-calls >` for
844
852
more information.
845
853
854
+ Examples
855
+ ^^^^^^^^
856
+
846
857
Example that shows how to use the members:
847
858
848
859
.. code-block :: solidity
@@ -966,6 +977,3 @@ Another example that uses external function types:
966
977
exchangeRate = response;
967
978
}
968
979
}
969
-
970
- .. note ::
971
- Lambda or inline functions are planned but not yet supported.
0 commit comments