go_script

package module
v0.0.0-...-fb088a2 Latest Latest
Warning

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

Go to latest
Published: Aug 19, 2019 License: MIT Imports: 6 Imported by: 0

README

go-script

使用golang一些类型进行类似scheme语法的脚本编程

usage

package main

import (
  "fmt"

  go_script "github.com/pysta3515/go-script"
)

type Sale struct {
  SaleID    int64
  SalePrice float64
  Shop      *Shop
}

func (sale *Sale) Env() map[string]interface{} {
  return go_script.Env(sale, "sale")
}

type Shop struct {
  ShopID int
}

func main() {
  id := 10
  env := go_script.Env(id, "id")
  e := "(+  (- id 1) 2 (+ 3 4))"
  fmt.Println(go_script.Eval(e).ToInt(env))
  sale := Sale{
    1,
    2.2,
    &Shop{
      3,
    },
  }
  e = "(if (>= sale.SaleID 1) 10.1 0)"
  fmt.Println(go_script.Eval(e).ToFloat(sale.Env()))
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Env

func Env(i interface{}, receiver string) map[string]interface{}

Types

type Atom

type Atom struct {
	// contains filtered or unexported fields
}

Atom 抽象一个最简单的常量表达式

func (*Atom) Eval

func (node *Atom) Eval() Expr

func (*Atom) ToBool

func (node *Atom) ToBool(_ map[string]interface{}) bool

func (*Atom) ToFloat

func (node *Atom) ToFloat(_ map[string]interface{}) float64

func (*Atom) ToInt

func (node *Atom) ToInt(_ map[string]interface{}) int

func (*Atom) ToInt64

func (node *Atom) ToInt64(_ map[string]interface{}) int64

type Binary

type Binary struct {
	OP   string
	Args []Expr
}

Binary 抽象一个二元或多远运算

func (*Binary) Eval

func (binary *Binary) Eval() Expr

func (*Binary) Parse

func (binary *Binary) Parse(scan *scanner.Scanner)

func (*Binary) ToBool

func (binary *Binary) ToBool(env map[string]interface{}) bool

func (*Binary) ToFloat

func (binary *Binary) ToFloat(env map[string]interface{}) float64

func (*Binary) ToInt

func (binary *Binary) ToInt(env map[string]interface{}) int

func (*Binary) ToInt64

func (binary *Binary) ToInt64(env map[string]interface{}) int64

type Expr

type Expr interface {
	Eval() Expr
	ToInt(env map[string]interface{}) int
	ToInt64(env map[string]interface{}) int64
	ToFloat(env map[string]interface{}) float64
	ToBool(env map[string]interface{}) bool
}

func Eval

func Eval(expr string) Expr

type Var

type Var struct {
	Name string
	Val  interface{}
}

Var 抽象一个变量引用

func (*Var) Eval

func (v *Var) Eval() Expr

func (*Var) ToBool

func (v *Var) ToBool(env map[string]interface{}) bool

func (*Var) ToFloat

func (v *Var) ToFloat(env map[string]interface{}) float64

func (*Var) ToInt

func (v *Var) ToInt(env map[string]interface{}) int

func (*Var) ToInt64

func (v *Var) ToInt64(env map[string]interface{}) int64

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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