Transcrypt and TranscryptFrame



现在我正在研究一个名为TranscryptFrame的Transcrypt常用函数的包装器。我收到一个编译器错误,我想知道我们是否可以以任何方式解决这个问题,也许只是代码中的一点点更改就可以让事情正常工作。

您需要在工作目录中具有最新的 TranscryptFrame.py 文件以进行编译。您可以在此处找到它:https://github.com/bunkahle/Transcrypt-Examples/blob/master/dom/TranscryptFrame.py - 请随时对此文件或错误报告提出更改或改进建议。将来可能会将其作为库提供。

所以这是甚至无法编译的代码,我得到错误无法分配给函数调用。

# change_text2a_tf.py
import TranscryptFrame as tf
def insert():
    # working:
    # myElement = tf.S("#intro")
    # tf.S("#demo").innerHTML = "The text from the intro paragraph is " + myElement.innerHTML
    # working:
    # myElement_htm = tf.S("#intro", "htm")
    # tf.S("#demo").innerHTML = "The text from the intro paragraph is " + myElement_htm
    # working:
    # tf.S("#demo").innerHTML = "The text from the intro paragraph is " + tf.S("#intro", "htm")
    # not working: can't assign to function call on compiling
    tf.S("#demo", "htm") = "The text from the intro paragraph is " + tf.S("#intro", "htm")

这是运行它的 HTML:

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="__javascript__/change_text2a_tf.js"></script>
    <title>Change Text with TranscryptFrame</title>
  </head>
  <body onload=change_text2a_tf.insert()>
    <p id="intro"><b>Hello World!</b></p>
    <p>This example demonstrates the <b>getElementById</b> method!</p>
    <p id="demo"></p>
  </body>
</html>

在行中:

tf.S("#demo", "htm") = "The text from the intro paragraph is " + tf.S("#intro", "htm")

您正在为函数的结果分配一些东西,即tf.S("#demo", "htm")

这在Python,JavaScript或Transcrypt中是不可能的。在C++中可以通过返回引用来实现,但C++在这方面是相当独特的。

Python,JavaScript或Transcrypt中的函数不会返回LValue(内存中的位置(,而是返回RValue(驻留在该位置的值(。不能在值中存储任何内容,只能在位置中存储。

以下C++代码段使用 = 左侧的引用和函数调用:

float &lowestGrade (float &x, float & y) {
    return x < y ? x : y;
}

可以按如下方式调用:

grade1 = 4;
grade2 = 6;
lowestGrade  (grade1, grade2) += 2;

请注意,在此之后grade1将是 6。

但如前所述,返回 LValues(内存中的位置(的函数对于C++来说是相当独特的。

好的,所以最短的方法是:

tf.S("#demo").innerHTML = "The text from the intro paragraph is " + 
                           tf.S("#intro", "htm")

如果我想要像这样的JQuery:

$("#demo").html("The text from the intro paragraph is ")

我需要调用 JQuery 的编译指示,如下所示:

__pragma__ ('alias', 'S', '$')
S("#demo").html("The text from the intro paragraph is ")

并在 html 文档中导入 JQuery 库

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

拥有类似东西的唯一方法

import TranscryptFrame as tf
tf.S("#demo").html("The text from the intro paragraph is ")

将是编写一个名为 S 的类或使用不同的名称,例如 D(用于文档(,以便我可以使用 tf 像对象一样处理它。D("#demo"(.html(*args(.但是由于JQuery已经存在,因此在TranscryptFrame中实现一个类实际上没有任何意义,而只是使用编译指示和现有的JQuery库,例如:

__pragma__ ('alias', 'S', '$')
S("#demo").html("The text from the intro paragraph is ")

相关内容

  • 没有找到相关文章

最新更新