我一直在尝试将一个向量数学库移植到transcrypt,但在模拟可迭代类型时遇到了问题。
我有一个带有内部可迭代的向量类。以下是核心代码的简化版本:
在纯python中,
我有一个带有内部可迭代的向量类。以下是核心代码的简化版本:
class Vector:
def __init__(self, *values):
self.values = values
def __iter__(self):
for item in self.values:
yield item
def __add__(self, other):
return Vector( *(x + y for x, y in zip(self, other)))
在纯python中,
(Vector(1,2,3) + Vector(3,4,5))
正如你所期望的那样返回Vector(4,6,8)
。但是经过转译后,相同的代码失败了--在Javascript中,zip()
似乎期望其可迭代对象上有一个Javascript的map()
函数。在这种情况下,我可以通过明确地定位底层存储来解决问题,因为它是用*args创建的,所以似乎具有所需的方法。def __add__(self, other):
pairwise = zip(self.values, other.values)
return Vector( *(itertools.starmap(lambda a, b: a + b, pairwise)))
但是,我觉得将其与内部容器耦合在一起感觉不太稳定,我认为创建迭代器和starmap存在开销。
那么,如何解决这个问题呢?我可以在类中添加map()
吗?如果可以,正确的签名是什么?底层的JS似乎依赖于JS作用域行为...这让我感到害怕...