在 ChaiScript 中返回多个值?

在 Lua 中可以返回多个值,例如:

function math.pos(x1, y1, x2, y2)
  return x2 - x1, y2 - y1
end

distanceX, distanceY = math.pos(100, 100, 300, 300) --> distanceX = 0, distanceY = 0

在 ChaiScript 中我能做类似的事情吗?

点赞
用户9549501
用户9549501

在 ChaiScript 中不可能做到多返回值,不过你可以使用一个包含多个值的结构体来模拟它。

你需要定义一个结构体(在 C++ 中),像这样:

struct multiple_return_value {
    int first;
    int second;
    multiple_return_value(int a, int b) : first(a), second(b) {}
};

然后这样在 ChaiScript 中注册它:

chai.add(chaiscript::user_type<multiple_return_value>(), "multiple_return_value");
chai.add(chaiscript::constructor<multiple_return_value(int, int)>(), "multiple_return_value");
chai.add(chaiscript::fun(&multiple_return_value::first), "first");
chai.add(chaiscript::fun(&multiple_return_value::second), "second");

然后你可以这样使用它:

def math_pos(x1, x1, y2, y2) {
    return multiple_return_value(x2 - x1, y2 - y1);
}

var distance = math_pos(100, 100, 300, 300);

print("distance x: " + to_string(distance.first));
print("distance y: " + to_string(distance.second));
2020-09-14 07:50:50