运输布尔.py用Transcryp包到javascript

2024-09-29 18:56:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一些帮助将一个相对简单的python包boolean.py(该包执行布尔代数运算)转换成javascript,使用transcrypt作为我选择的transpiler。你知道吗

到目前为止我所做的事情:

  1. 使用inspect模块删除,该模块似乎不受transcrypt支持
  2. 在python代码中切换到显式的SuperClassName.__init__()调用而不是super(SuperClassName, self).__init__(),因为transcrypt只支持简单的大小写继承(和python3语法)。你知道吗

您可以在this github branch中找到当前代码,称为transcrypt。你知道吗

好消息是boolean.py实际上是boolean/boolean.py下的一个.py文件,其他的都是python项目结构。坏消息是boolean.py同时在python2python3上运行,我不知道这是否是导致我要描述的当前问题的原因:

阅读了transcrypt docs的相关部分后,我将文件传输到:

cd boolean/ && transcrypt boolean.py

这给了我一个关于basestring的无害警告,并用boolean.jsboolean.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子对象。请参阅hellopongtranscrypt示例,查看它相应地在window上创建hellopong对象。你知道吗

你能解释一下我做错了什么吗?你知道吗


Tags: 模块对象代码py文件夹警告inithtml
1条回答
网友
1楼 · 发布于 2024-09-29 18:56:35

我花了相当长的时间试图让您的lib与Transcrypt一起工作,遇到了几个问题:

  1. cd1和cd3等发行版还没有使用。这是一个很容易避免的问题。例如,您可以背靠背测试 Transcrypt和CPython版本boolean.py,使用Transcrypt的自动测试工具。你自己写一个非常精简的版本unittest等等。

  2. @property decorator还不可用。但是您可以使用非修饰符语法中的属性,如文档中所示http://www.transcrypt.org/docs/html/supported_constructs.html#properties

  3. 在你的修改过的代码中可能有一些错误,比如函数构造函数在无休止的递归中调用自己。

  4. 一些异常类型(如TypeError)还没有在Transcrypt中实现。

  5. Transcrypt的type函数目前仅用一个参数定义,类似return type(base_class.__name__, (base_class,), {})的函数现在将不起作用。

  6. Transcrypt中的__hash__运算符函数不能重载。这是由于需要与JavaScript的互操作性。类似于{'bird':'egg'、'human':'baby'}的代码被编译成一个JavaScript对象文本,这有助于像许多JavaScript库一样使用对象文本进行初始化。

  7. dictvalues ()方法被意外跳过。它将被添加到Transcrypt的下一个提交中。

这些就是我能找到的问题。可能还有更多,但我缺乏对boolean.py的理解,无法在合理的时间内找到它们。你知道吗

对我来说,最终的结果是我可以让它编译,但我不能让它在解析阶段开始后正常运行。你知道吗

我的期望是,对于熟悉您的库的人来说,这一切都可以通过可行的解决方法来解决,因为我在您的lib中没有看到真正超出Transcrypt能力范围的代码。你知道吗

Transcrypt永远不会100%兼容CPython,因为要求生成的代码应该和原生JavaScript一样快速和紧凑。但是如果你遇到像dict.values这样的明显的遗漏,它们会被添加进来。也有像string.isalpha这样的边界案例。只要它们是小函数,我就没有理由不添加它们。只需在https://github.com/qquick/Transcrypt的问题中添加一个特性请求。你知道吗

frozenset这样的东西不太可能被添加到核心代码中,尽管在库中贡献这样的数据结构当然是受欢迎的。你知道吗

请注意,如果需要,还可以在任何地方插入任意JavaScript代码片段。你知道吗

相关问题 更多 >

    热门问题