【问题标题】:Transcrypt and TranscryptFrameTranscrypt 和 TranscryptFrame
【发布时间】:2018-03-05 17:02:12
【问题描述】:

现在,我正在开发一个名为 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>

【问题讨论】:

    标签: transcrypt


    【解决方案1】:

    行内:

    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++ 来说是相当独特的。

    【讨论】:

      【解决方案2】:

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

      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 中实现一个类并没有任何意义,而只是使用 pragma 和现有的 JQuery 库,例如:

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

      【讨论】:

      • 也许你可以在这里使用 Python / Transcrypt 属性来获得一个优雅的符号。分配给该属性将调用一个函数,该函数将调用 JQueries .html () 方法。
      • 在您看来,优雅的符号是什么样子的? JQuery 表示法非常简短且非常有效。也许会有更多的蟒蛇风格,但我目前不知道它会如何。我尝试在 TranscryptFrame 中实现 tf.doc_id(idname) 之类的函数,但与 JQuery 相比它们仍然很长。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2021-09-19
      • 2021-07-16
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多