Giter VIP home page Giter VIP logo

Comments (1)

ckcfcc avatar ckcfcc commented on June 20, 2024

The previous problem has been solved.

But a new problem has arisen. The values of members in the native object cannot be changed in the script. What method can be used to solve this problem?

native module code:

type MyPos struct {
	X, Y int
}

func (mp *MyPos) GetTengoObject() tengo.Object {
	return &tengo.Map{
		Value: map[string]tengo.Object{
			"x": &tengo.Int{Value: int64(mp.X)},
			"y": &tengo.Int{Value: int64(mp.Y)},
			"print": &tengo.UserFunction{
				Name: "print",
				Value: func(args ...tengo.Object) (ret tengo.Object, err error) {
					mp.Print()
					return tengo.UndefinedValue, nil
				},
			},
		},
	}
}

func (mp *MyPos) Print() {
	log.Printf("[native] X:%d Y:%d", mp.X, mp.Y)
}

func newMyPos(args ...tengo.Object) (ret tengo.Object, err error) {
	myPos := &MyPos{X: 1, Y: 2}
	return myPos.GetTengoObject(), nil
}

var PosModule = &tengo.BuiltinModule{
	Attrs: map[string]tengo.Object{
		"newMP": &tengo.UserFunction{
			Name:  "new",
			Value: newMyPos,
		},
	},
}

script code:

md := import("myModule")

p1 := md.newMP()
p1.x += 123
p1.y = 234
log("x:%d y:%d", p1.x, p1.y) // output script object field value
p1.y -= 11
p1.print() // output native object field value

output:
2024/02/23 11:48:49 [scp] x:124 y:234
2024/02/23 11:48:49 [native] X:1 Y:2 // why hasn't it changed?

from tengo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.