私はベクトル計算ライブラリをtranscryptに移植しようとしていましたが、繰り返し可能な型をエミュレートする問題にぶつかりました。トランスクリプトの反復可能なエミュレーション
私はVectorクラスに内部イテラブルを持っています。あなたが期待よう
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()
はiterableオブジェクトのJavascript map()
関数を期待しているようです。
私は明示的基盤となるストレージ、標的化することによって、このような場合には、それを回避することができます - それは*引数で作成されていますので、 - 必要な方法があるようです:
def __add__(self, other):
pairwise = zip(self.values, other.values)
return Vector(*(itertools.starmap(lambda a, b: a + b, pairwise)))
をこれだけにそれを結合させます内部のコンテナは私に不快感を与えています。イテレータとスタルマップを作成するためのオーバーヘッドを想定しています。
これを回避するには適切な方法はありますか?クラスにmap()
を追加できますか?もしそうなら、正しい署名は何ですか?基礎となるJSは、JSスコープの動作に依存しているようです...私を恐れている...