我想使用 rhino 的(JavaScript 的)function.apply()
将参数传递给 varags Java 方法,如下所示:
function sprintf()
{
return java.lang.String.format.apply(arguments);
}
sprintf("%d\n", 5);
但是调用 sprintf()
会报错:
Error: can't find method java.lang.String.format().
我想这是因为 format()
方法不是一个正确的 JavaScript 函数而是一个 Java 方法,所以它没有定义 apply()
。 (虽然错误消息似乎不是这么说的,但也许不是。)
我发现我可以添加自己的 apply() 方法:
java.lang.String.format.apply = function() {}
但是如果你明白我的意思的话,我看不出没有 apply()
怎么写 apply()
。有什么想法吗?
最佳答案
@文森特蒙特雷索
这是一个部分解决方案:
function sprintf(string) {
var args = Array.prototype.splice.call(arguments, 1);
for (var i = 0; i < args.length; i++) {
if (!isNaN(args[i])) {
args[i] = new java.lang.Integer(args[i]);
}
}
return java.lang.String.format(String(string), args);
}
有几个问题:
- 在您的实现中,未正确使用 .format() 方法签名,即第一个参数应为字符串
- 参数列表中的数值必须转换为正确的 java 类型。
调用示例:
print(sprintf("Hello %s %d", "number", 2));
产生:“Hello number 2”
关于java - 在 rhino (JavaScript) 的 Java 方法上使用 .apply(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821431/