我想要一些帮助将一个相对简单的python包boolean.py
(该包执行布尔代数运算)转换成javascript,使用transcrypt作为我选择的transpiler。你知道吗
到目前为止我所做的事情:
inspect
模块删除,该模块似乎不受transcrypt
支持SuperClassName.__init__()
调用而不是super(SuperClassName, self).__init__()
,因为transcrypt
只支持简单的大小写继承(和python3语法)。你知道吗您可以在this github branch中找到当前代码,称为transcrypt
。你知道吗
好消息是boolean.py
实际上是boolean/boolean.py
下的一个.py
文件,其他的都是python项目结构。坏消息是boolean.py
同时在python2
和python3
上运行,我不知道这是否是导致我要描述的当前问题的原因:
阅读了transcrypt docs的相关部分后,我将文件传输到:
cd boolean/ && transcrypt boolean.py
这给了我一个关于basestring
的无害警告,并用boolean.js
和boolean.min.js
创建了__javascript__
文件夹。到目前为止,还不错。你知道吗
在我创建要测试的__javascript__
文件夹旁边:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>transcrypt boolean.py</title>
</head>
<body>
<script src="__javascript__/boolean.js"></script>
</body>
</html>
但是,当我在firefox中加载boolean.html
时,控制台会给出一个警告:
TypeError: can't assign to properties of (new String("all_feature_namesnested_scopes,generators,division,absolute_import,with_statement,print_function,unicode_literals,barry_as_FLUFL,generator_stop")): not an object
相反,我希望看到的是一个boolean
对象,它有BooleanAlgebra
子对象。请参阅hello
和pong
的transcrypt
示例,查看它相应地在window
上创建hello
和pong
对象。你知道吗
你能解释一下我做错了什么吗?你知道吗
我花了相当长的时间试图让您的lib与Transcrypt一起工作,遇到了几个问题:
cd1和cd3等发行版还没有使用。这是一个很容易避免的问题。例如,您可以背靠背测试 Transcrypt和CPython版本
boolean.py
,使用Transcrypt的自动测试工具。你自己写一个非常精简的版本unittest
等等。@property decorator还不可用。但是您可以使用非修饰符语法中的属性,如文档中所示http://www.transcrypt.org/docs/html/supported_constructs.html#properties
在你的修改过的代码中可能有一些错误,比如函数构造函数在无休止的递归中调用自己。
一些异常类型(如
TypeError
)还没有在Transcrypt中实现。Transcrypt的
type
函数目前仅用一个参数定义,类似return type(base_class.__name__, (base_class,), {})
的函数现在将不起作用。Transcrypt中的
__hash__
运算符函数不能重载。这是由于需要与JavaScript的互操作性。类似于{'bird':'egg'、'human':'baby'}的代码被编译成一个JavaScript对象文本,这有助于像许多JavaScript库一样使用对象文本进行初始化。类
dict
的values ()
方法被意外跳过。它将被添加到Transcrypt的下一个提交中。这些就是我能找到的问题。可能还有更多,但我缺乏对
boolean.py
的理解,无法在合理的时间内找到它们。你知道吗对我来说,最终的结果是我可以让它编译,但我不能让它在解析阶段开始后正常运行。你知道吗
我的期望是,对于熟悉您的库的人来说,这一切都可以通过可行的解决方法来解决,因为我在您的lib中没有看到真正超出Transcrypt能力范围的代码。你知道吗
Transcrypt永远不会100%兼容CPython,因为要求生成的代码应该和原生JavaScript一样快速和紧凑。但是如果你遇到像
dict.values
这样的明显的遗漏,它们会被添加进来。也有像string.isalpha
这样的边界案例。只要它们是小函数,我就没有理由不添加它们。只需在https://github.com/qquick/Transcrypt的问题中添加一个特性请求。你知道吗像
frozenset
这样的东西不太可能被添加到核心代码中,尽管在库中贡献这样的数据结构当然是受欢迎的。你知道吗请注意,如果需要,还可以在任何地方插入任意JavaScript代码片段。你知道吗
相关问题 更多 >
编程相关推荐