Abstraktní Wikipedie/Volání evaluátoru funkcí
Appearance
Projekt Phabricatoru: #abstract wikipedia
Abstraktní Wikipedie |
---|
(Diskuse) |
Obecné informace |
Vývojový plán |
|
Poznámky, koncepty, diskuse |
|
Příklady a makety |
Datové nástroje |
Historický |
- Toto je příklad volání funkce Evaluátoru funkcí.
Všimněte si, že se předpokládá, že pouze orchestrátor bude přímo volat evaluátor.
Cílem evaluátoru funkcí je, aby mohl být spuštěn bez volání jiných zdrojů dat, databází nebo služeb.
Podívejte se do návrhu architektury, jak orchestrátor a evaluátor spolupracují.
{
"type": "Function call",
"function": {
"type": "Function",
"arguments": [
{
"type": "Argument declaration",
"argument type": "Positive integer",
"key id": "Z144K1",
"label": {
"type": "Multilingual text",
"texts": [
{
"type": "Monolingual text",
"language": "English",
"text": "left"
}
]
}
},
{
"type": "Argument declaration",
"argument type": "Positive integer",
"key id": "Z144K2",
"label": {
"type": "Multilingual text",
"texts": [
{
"type": "Monolingual text",
"language": "English",
"text": "right"
}
]
}
}
],
"return type": "Positive integer",
"testers": [],
"implementation": [
{
"type": "implementation",
"code": {
"type": "Code",
"language": "Javascript",
"code": "Z144K0 = Z144K1 + Z144K2"
}
}
],
"identity": "add"
},
"left": {
"type": "Positive integer",
"value": "2"
},
"right": {
"type": "Positive integer",
"value": "2"
}
}
|
{
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z8",
"Z8K1": [
{
"Z1K1": "Z17",
"Z17K1": "Z70",
"Z17K2": "Z144K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
{
"Z1K1": "Z11",
"Z11K1": "Z251",
"Z11K2": "left"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z70",
"Z17K2": "Z144K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
{
"Z1K1": "Z11",
"Z11K1": "Z251",
"Z11K2": "right"
}
]
}
}
],
"Z8K2": "Z70",
"Z8K3": [],
"Z8K4": [
{
"Z1K1": "Z14",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z301",
"Z16K2": "Z144K0 = Z144K1 + Z144K2"
}
}
],
"Z8K5": "Z144"
},
"Z144K1": {
"Z1K1": "Z70",
"Z70K1": "2"
},
"Z144K2": {
"Z1K1": "Z70",
"Z70K1": "2"
}
}
|
Výsledkem by mělo být:
{
"type": "positive integer",
"value": "4"
}
|
{
"Z1K1": "Z70",
"Z70K1": "4"
}
|
Při každém volání evaluační funkce musí být splněny následující podmínky:
- musí být platným objektem ZObject;
- musí být typu Z7/Function call (volání funkce);
- Z7K1/function (funkce) musí být doslovná Z8/Function (Funkce), nikoli odkaz na Z8/Function (Funkci);
- každý Z17K1/argument type (typ argumentu) musí být typu, který evaluátor funkce zná;
- Z8K2/return type (návratový typ) musí být typu, který evaluátor funkce zná;
- Z8K3/testers (testery) musí být prázdný seznam;
- Z8K4/implementation (implementace) musí být seznam s přesně jedním prvkem typu Z14/Implementation (Implementace);
- musí být uveden pouze klíč Z14K3/code (kód) Z14/Implementation (Implementace);
- Z14K3/code (kód) musí ukazovat na Z16/Code (Kód), přičemž Z16K1/language (jazyk) je Z301/Javascript (pro evaluátor funkcí v Javascriptu. Budeme vytvářet i vyhodnocovače funkcí v jiných jazycích a tam musí být hodnota příslušného jazyka);
- všechny zadané argumenty musí být literály (v tomto případě hodnoty Z144K1/left a Z144K2/right).
V případě, že volání funkce nesplňuje zadané invarianty (nebo se něco jiného pokazí), vrátí se Z5/Error (Chyba).
Viz též
- Funkční model (podle plánu)
- Funkční model (předběžný)
- Přehled poznámek