我想使用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()
。有什么想法吗?
答案 0 :(得分:1)
@Vincent Montressor
以下是部分解决方案:
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);
}
有几个问题:
以下是示例电话:
print(sprintf("Hello %s %d", "number", 2));
产生:“你好2号”
答案 1 :(得分:0)
如果找不到java.lang,则在 String 对象中使用“format”{method}。如果找到String.format,则使用:
format("Hello, %s!", [firstName]);
你formatString函数创建sprintf
function sprintf() {
return String.format.apply(arguments);
}
在我看来,使用 format()功能......