如何将julia字符串宏与变量一起使用?

时间:2017-07-30 22:03:05

标签: macros julia

如果这已经得到回答,请道歉,但是当我向其提供表示字符串而不是简单字符串的变量时,我使用PyCall库中包含的“py”字符串宏时非常困难。

示例:

@py_str "2 + 2" 

返回4

z = "2 + 2"
@py_str z

导致一个错误,即interpolate_pycode不接受Expr参数,@ py_str($(z))也是如此。

如何将@py_str传递给字符串变量?

(只是为了澄清 - 上面是一个玩具示例,我将它用于真正需要的应用程序)。

1 个答案:

答案 0 :(得分:2)

@py_str "\$\$z"是你的朋友(在REPL中查看使用?@py_str的宏帮助)。最好将同一个宏写为py"$$z"

来自REPL帮助(粗体相关部分):

  

py“..... python code .....”

     

在主Python模块中评估给定的Python代码字符串。

     

如果字符串是单行(没有换行符),那么Python   计算表达式并返回结果。如果字符串是
  多行(包含换行符),然后编译Python代码   并在 Python模块中进行评估,并且不返回任何内容。

     

如果o选项附加到字符串,如py“...”o,那么   返回值是未转换的PyObject;否则,是   如果可能,自动转换为原生Julia类型。

     

Python代码中出现的任何$ var或$(expr)表达式   (在评论或字符串文字中除外)在Julia和   通过自动生成的全局变量传递给Python。这允许   你将Julia值“插入”到Python代码中。

     

类似地,Python代码中的ny $$ var或$$(expr)表达式是   在Julia中评估,通过字符串转换为字符串,并粘贴到   进入Python代码。这允许您评估代码所在的代码   本身是由Julia表达式生成的。

PS小错误 ny 而不是任何在包源中。