operators

package
v0.125.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2021 License: AGPL-3.0 Imports: 5 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Add = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXNumber(num1.Native().Add(num2.Native()))
})

Add adds two numbers.

@(2 + 3) -> 5
@(fields.age + 10) -> 33

@operator add "+"

View Source
var Concatenate = textualBinary(func(env envs.Environment, text1 types.XText, text2 types.XText) types.XValue {
	var buffer strings.Builder
	buffer.WriteString(text1.Native())
	buffer.WriteString(text2.Native())
	return types.NewXText(buffer.String())
})

Concatenate joins two text values together.

@("hello" & " " & "bar") -> hello bar
@("hello" & null) -> hello

@operator concatenate "&"

View Source
var Divide = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	if num2.Equals(types.XNumberZero) {
		return types.NewXErrorf("division by zero")
	}

	return types.NewXNumber(num1.Native().Div(num2.Native()))
})

Divide divides a number by another.

@(4 / 2) -> 2
@(3 / 2) -> 1.5
@(46 / fields.age) -> 2
@(3 / 0) -> ERROR

@operator divide "/"

View Source
var Equal = textualBinary(func(env envs.Environment, text1 types.XText, text2 types.XText) types.XValue {
	return types.NewXBoolean(text1.Equals(text2))
})

Equal returns true if two values are textually equal.

@("hello" = "hello") -> true
@("hello" = "bar") -> false
@(1 = 1) -> true

@operator equal "="

View Source
var Exponent = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	d1 := num1.Native()
	d2 := num2.Native()

	if decimal.New(d2.IntPart(), 0).Equals(d2) {
		return types.NewXNumber(d1.Pow(d2))
	}

	f1, _ := d1.Float64()
	f2, _ := d2.Float64()

	return types.NewXNumber(decimal.NewFromFloat(math.Pow(f1, f2)))
})

Exponent raises a number to the power of a another number.

@(2 ^ 8) -> 256

@operator exponent "^"

View Source
var GreaterThan = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXBoolean(num1.Compare(num2) > 0)
})

GreaterThan returns true if the first number is greater than the second.

@(2 > 3) -> false
@(3 > 3) -> false
@(4 > 3) -> true

@operator greaterthan ">"

View Source
var GreaterThanOrEqual = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXBoolean(num1.Compare(num2) >= 0)
})

GreaterThanOrEqual returns true if the first number is greater than or equal to the second.

@(2 >= 3) -> false
@(3 >= 3) -> true
@(4 >= 3) -> true

@operator greaterthanorequal ">="

View Source
var LessThan = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXBoolean(num1.Compare(num2) < 0)
})

LessThan returns true if the first number is less than the second.

@(2 < 3) -> true
@(3 < 3) -> false
@(4 < 3) -> false

@operator lessthan "<"

View Source
var LessThanOrEqual = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXBoolean(num1.Compare(num2) <= 0)
})

LessThanOrEqual returns true if the first number is less than or equal to the second.

@(2 <= 3) -> true
@(3 <= 3) -> true
@(4 <= 3) -> false

@operator lessthanorequal "<="

View Source
var Multiply = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXNumber(num1.Native().Mul(num2.Native()))
})

Multiply multiplies two numbers.

@(3 * 2) -> 6
@(fields.age * 3) -> 69

@operator multiply "*"

View Source
var Negate = numericalUnary(func(env envs.Environment, num types.XNumber) types.XValue {
	return types.NewXNumber(num.Native().Neg())
})

Negate negates a number

@(-fields.age) -> -23

@operator negate "- (unary)"

View Source
var NotEqual = textualBinary(func(env envs.Environment, text1 types.XText, text2 types.XText) types.XValue {
	return types.NewXBoolean(!text1.Equals(text2))
})

NotEqual returns true if two values are textually not equal.

@("hello" != "hello") -> false
@("hello" != "bar") -> true
@(1 != 2) -> true

@operator notequal "!="

View Source
var Subtract = numericalBinary(func(env envs.Environment, num1 types.XNumber, num2 types.XNumber) types.XValue {
	return types.NewXNumber(num1.Native().Sub(num2.Native()))
})

Subtract subtracts two numbers.

@(3 - 2) -> 1
@(2 - 3) -> -1

@operator subtract "- (binary)"

Functions

This section is empty.

Types

type BinaryOperator

type BinaryOperator func(envs.Environment, types.XValue, types.XValue) types.XValue

BinaryOperator is an operator which takes two arguments

type UnaryOperator

type UnaryOperator func(envs.Environment, types.XValue) types.XValue

UnaryOperator is an operator which takes a single argument

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL