es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Referencia de Rust con js-sandbox

Estoy escribiendo una calculadora en Rust que utiliza js-sandbox para permitir el scripting de funciones personalizadas en JavaScript por parte del usuario.

Tengo una función que toma una referencia mutable de un “i32” y devuelve una “Option” en caso de error, la llamo “run_js”.

Quiero crear una variable “js_out” y pasar la referencia a “run_js”, e imprimirlo para demostrar que la función se ejecutó correctamente.

También tengo un archivo “main.js” con la función “fibonacci” que he probado y que funciona con nodejs.

Estoy recibiendo el error: let *output = script.call("fibonacci", &arg)?; expected pattern

main.rs

use js_sandbox::{Script, AnyError};

fn run_js(sname: &str, output: &mut i32) -> Result<(), AnyError> {
    let mut script = Script::from_file(sname).expect("File can be loaded");
    let arg = 6;
    let *output = script.call("fibonacci", &arg)?;
    Ok(())
}

fn main() -> Result<(), AnyError> {
    println!("SCalc version 0.1.0");

    let mut js_out: i32 = 0;

    run_js("src/main.js", &mut js_out)?;

    println!("output: {}", js_out);
    Ok(())
}

main.js

function fibonacci(length, startNums=[0, 1]) {
    for (var i = 1; i < length-1; i++) {
        startNums.push(startNums[i-1]+startNums[i]);
    }
    return startNums[startNums.length-1];
}

console.log(fibonacci(6));
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:

    En main.rs, cambia let *output = script.call("fibonacci", &arg)?; a let output = script.call("fibonacci", &arg)?; para remover el * antes de output.

Comments are closed.