Datový typ routine!

1. Úvodem

Hodnota routine! představuje funkci pro danou specifikaci a tělo Red/System.

Specifikace přijímá jako argument datový typ Redu a vrací hodnotu, jež automaticky konvertuje při volání na příslušné typy soustavy Red/System.

Dokumentaci pro Red/System lze nalézti zde: https://static.red-lang.org/red-system-specs.html

Typ routine! je člen typesetů default! a any-function!

2. Vytvoření

Hodnoty routine! lze vytvořit s použitím funkce routine.

3. Literálová skladba

<routine> ::= routine <routine-spec> <routine-body>
<routine-spec> ::= [<docstring>° <routine-argument>* <locals>° <routine-return>°]
<routine-argument> ::= <word> <argument doc>° | <word> [<type-literal>] <argument-doc>°
<locals> ::= /local <routine-argument>*
<routine-return> ::= return: [<type-literal>]
<type-literal> ::= any-type! | <type-name>
<routine-body> ::= <block>

3.1. Vytvoření při runtime

Hodnoty routine! nejsou pro interpreter povoleny. Musejí být uvedeny typem set-word a následně kompilovány.

Red []

increment: routine [
    n       [integer!]
    return: [integer!]
][
    n + 1
]

Argumenty rutin tvoří jedno slovo typu any-type! nebo aliasem struct! ze soustavy Red/System, definovaným zde: https://github.com/red/red/blob/master/runtime/datatypes/structures.reds.

Příklad

integer! je přeložan na ekvivalent soustavy Red/System:

red-integer!: alias struct! [
	header 	[integer!]								;-- cell header
	padding	[integer!]								;-- align value on 64-bit boundary
	value	[integer!]								;-- 32-bit signed integer value
	_pad	[integer!]
]

4. Testování hodnot

K ověření, zda hodnota je typu routine, použijeme funkce routine?.

routine? :increment

Datový typ zadané hodnoty získáme dotazem type?.

type? :increment

5. Předdefinovaná slova

5.1. Funkce

routine, routine?

results matching ""

    No results matching ""