103 lines
2.1 KiB
Jsonnet
103 lines
2.1 KiB
Jsonnet
local utils = import 'utils.libsonnet';
|
|
|
|
/* A C-style
|
|
comment.
|
|
*/
|
|
# A Python-style comment.
|
|
|
|
// Define a "local" function.
|
|
// Default arguments are like Python:
|
|
local my_function(x, y=10) = x + y;
|
|
|
|
local object = {
|
|
// A method
|
|
my_method(x): x * x,
|
|
};
|
|
|
|
local string1 = 'Farmer\'s Gin';
|
|
local string_newline1 = 'this is
|
|
a valid string
|
|
with newlines';
|
|
local string_newline2 = "this is
|
|
also
|
|
a valid string";
|
|
|
|
local timcollins = |||
|
|
The Tom Collins is essentially gin and
|
|
lemonade. The bitters add complexity.
|
|
|||;
|
|
|
|
local obj = {
|
|
"foo": 1,
|
|
"bar": {
|
|
"arr": [1, 2, 3],
|
|
"number": 10 + 7,
|
|
},
|
|
};
|
|
|
|
// Define a local function.
|
|
// Default arguments are like Python:
|
|
local my_function(x, y=10) = x + y;
|
|
|
|
// Define a local multiline function.
|
|
local multiline_function(x) =
|
|
// One can nest locals.
|
|
local temp = x * 2;
|
|
// Every local ends with a semi-colon.
|
|
[temp, temp + 1];
|
|
|
|
local object = {
|
|
// A method
|
|
my_method(x): x * x,
|
|
};
|
|
|
|
local large = true;
|
|
|
|
{
|
|
|
|
// Functions are first class citizens.
|
|
call_inline_function:
|
|
(function(x) x * x)(5),
|
|
|
|
call_multiline_function: multiline_function(4),
|
|
|
|
// Using the variable fetches the function,
|
|
// the parens call the function.
|
|
call: my_function(2),
|
|
|
|
// Like python, parameters can be named at
|
|
// call time.
|
|
named_params: my_function(x=2),
|
|
// This allows changing their order
|
|
named_params2: my_function(y=3, x=2),
|
|
|
|
// object.my_method returns the function,
|
|
// which is then called like any other.
|
|
call_method1: object.my_method(3),
|
|
|
|
standard_lib:
|
|
std.join(' ', std.split("foo/bar", '/')),
|
|
len: [
|
|
std.length('hello'),
|
|
std.length([1, 2, 3]),
|
|
],
|
|
|
|
cocktails: {
|
|
local factor = if large then 2 else 1,
|
|
|
|
// Ingredient quantities are in fl oz.
|
|
'Tom Collins': {
|
|
ingredients: [
|
|
{ kind: string1, qty: 1.5*factor },
|
|
{ kind: 'Lemon', qty: 1 },
|
|
{ kind: 'Simple Syrup', qty: 0.5E+1 },
|
|
{ kind: 'Soda', qty: 2 },
|
|
{ kind: 'Angostura', qty: 'dash' },
|
|
],
|
|
garnish: 'Maraschino Cherry',
|
|
served: 'Tall',
|
|
description: timcollins,
|
|
},
|
|
},
|
|
}
|