gpt4 book ai didi

Javascript - 在没有运算符重载的情况下生成表达式

转载 作者:行者123 更新时间:2023-11-30 15:11:42 24 4
gpt4 key购买 nike

我在 js 项目中使用 three.js,我正在尝试计算一个向量是否仍在这样的区域中

var THRESHOLD = 10;
if(!is_in_rect(camera.position - forward * THRESHOLD)))
// do something

其中 camera.position 和 fowward 是 THREE.Vector3对象。

上述方法的问题虽然非常可读,但它不起作用,因为 js 不支持运算符重载。我必须写类似的东西

if(!in_rect(camera.position.clone().add(forward.clone().multiplyScalar(THRESHOLD)))

我觉得有点丑。

在我缺少的 js 中还有其他惯用的方法吗?

最佳答案

从您链接到的页面:

.addScaledVector ( v, s )

Adds the multiple of v and s to this vector

更好一点的是:

camera.position.clone().addScaledVector(forward,THRESHOLD)

此外,没有真正的理由向前克隆,因为它不会改变。

如果我关注@T.J.如果 idomatic 意味着使用 +-,如果我们是严格遵守JS。您可以构建自己的框架来使事情变得简单,例如通用加法运算符:

var add = function(x,y):
try {
var sum = x + y;
if ( s != undefined ) { return sum; }
#otherwise
sum = x.clone().add(y);
} catch {
#Otherwise threw something
sum = x.add(y) #maybe another exception? nest try/catch.
}
}

但这需要大量工作,因为 JS 可以随意添加内容,因此您必须进行大量类型检查。只是试图返回 x+y 通常是未定义的。在我的示例中,也许在简单添加之前测试添加函数可能更好。

这样你就可以创建你喜欢的 idiom,如果你认为它是值得的,并使用你的 add 来做所有事情(而不是 + 在我的例子中)。可能会随着您编写代码而增长。

关于Javascript - 在没有运算符重载的情况下生成表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45028469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com