Para usar Ruby como lenguaje de scripting, es decir, como lenguaje de incrustaci贸n como lua, existe una implementaci贸n ligera de Ruby llamada MRuby .
Solo se ha encontrado una biblioteca estable enlazada a mruby para ir . De forma predeterminada, puede compilar la versi贸n 1.2.0 de mruby (lanzamiento de 2015) y puede intentar compilar hasta la versi贸n 1.4.1 (lanzamiento de 2018). Pero la versi贸n actual de mruby ahora tiene la versi贸n 2.1.2 (2020). Hay una bifurcaci贸n con soporte para mruby 2.1.0 . Usaremos esta bifurcaci贸n para obtener la versi贸n 2.1.2 despu茅s de algunos cambios menores.
En versiones anteriores a 2.1.0, introdujeron al menos las siguientes incompatibilidades a las que debe prestar atenci贸n.
Versi贸n 2.1.1 :
Elimine la opci贸n de configuraci贸n MRB_INT16.
Versi贸n 2.1.2
IO#readchar returns a UTF-8 character fragment instead of EOFError if EOF is reached in the middle of UTF-8 characters. (86271572) This behavior is different from CRuby, but it is a mruby specification that supports either ASCII or UTF-8 exclusively.
Remove mrb_run() from C APIs.
go-mruby mrb_run. "Breaking Changes" . go-mruby:
https://github.com/mrbgems/go-mruby/tree/mruby-2 mruby-2.
go.mod go.sum go-mruby. , go . , go , go . go-mruby vendor .
mruby.go Run(), RunWithContext().
Makefile MRUBY_COMMIT 2.1.2 - mruby.
make. mruby vendor libmruby.a.
. mruby-error (https://github.com/mitchellh/go-mruby/pull/75). mruby require . . http://mruby.org/libraries/, mruby/build_config.rb . mruby/examples/mrbgems , mruby/mrbgems . , mruby-metaprog.
Intentemos habilitar el soporte json. Para hacer esto, necesita registrar la biblioteca en go-mruby / build_config.rb:
gem :github => 'iij/mruby-iijson'
Un ejemplo del uso de JSON.parse, mientras que, como puede ver, la opci贸n symbolize_names aparentemente no es compatible con esta biblioteca.
func main() {
mrb := mruby.NewMrb()
defer mrb.Close()
class := mrb.DefineClass("Example", nil)
class.DefineClassMethod("json_value", func(m *mruby.Mrb, self *mruby.MrbValue) (mruby.Value, mruby.Value) {
return mruby.String(`{"int":1, "array":["s1", "s2", {"nil": null}]}`), nil
}, mruby.ArgsReq(1))
result, err := mrb.LoadString(`JSON.parse(Example.json_value, {"symbolize_names" => true})`)
if err != nil {
panic(err.Error())
}
// Result: {"int"=>1, "array"=>["s1", "s2", {"nil"=>nil}]}
fmt.Printf("Result: %s\n", result.String())
}