Transcrypt 和 TranscryptFrame
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++ 中通过 return 引用是可能的,但 C++ 在这方面相当独特。
Python、JavaScript 或 Transcrypt 中的函数不是 return LValue(内存中的位置)而是 RValue(驻留在该位置的值)。
您不能在值中存储任何内容,只能在位置中存储。
下面的一段 C++ 代码在 =:
的左边使用了引用和函数调用
float &lowestGrade (float &x, float & y) {
return x < y ? x : y;
}
可以这样调用:
grade1 = 4;
grade2 = 6;
lowestGrade (grade1, grade2) += 2;
注意 grade1
之后是 6。
但是如前所述,函数 returning 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,例如:
__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 的 class 或具有不同名称的程序,例如 D(用于文档),以便我可以使用 object-like 处理它 tf.D("#演示").html(*参数)。但是由于 JQuery 已经存在,所以在 TranscryptFrame 中实现 class 没有任何意义,而只是使用 pragma 和现有的 JQuery 库,例如:
__pragma__ ('alias', 'S', '$')
S("#demo").html("The text from the intro paragraph is ")
现在我正在开发一个名为 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++ 中通过 return 引用是可能的,但 C++ 在这方面相当独特。
Python、JavaScript 或 Transcrypt 中的函数不是 return LValue(内存中的位置)而是 RValue(驻留在该位置的值)。 您不能在值中存储任何内容,只能在位置中存储。
下面的一段 C++ 代码在 =:
的左边使用了引用和函数调用float &lowestGrade (float &x, float & y) {
return x < y ? x : y;
}
可以这样调用:
grade1 = 4;
grade2 = 6;
lowestGrade (grade1, grade2) += 2;
注意 grade1
之后是 6。
但是如前所述,函数 returning 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,例如:
__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 的 class 或具有不同名称的程序,例如 D(用于文档),以便我可以使用 object-like 处理它 tf.D("#演示").html(*参数)。但是由于 JQuery 已经存在,所以在 TranscryptFrame 中实现 class 没有任何意义,而只是使用 pragma 和现有的 JQuery 库,例如:
__pragma__ ('alias', 'S', '$')
S("#demo").html("The text from the intro paragraph is ")