问题标签 [quasiquotes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
37 浏览

r - 将 enquo 表达式传递给子函数

这个问题与将变量传递给使用 `enquo()` 的函数有关。

我有一个更高的函数,其中包含 tibble ( dat) 的参数和 dat () 中感兴趣的列variables_of_interest_in_dat。在该函数中,有一个对我想要传递的另一个函数的调用variables_of_interest_in_dat

传递variables_of_interest_in_dat给 lower_function 的推荐方法是什么?

我已经尝试过lower_function(dat, !!!variables_of_interest_in_dat),但是当我运行higher_function(mtcars, cyl)它时会返回“错误:无法!!!在顶层使用”。

在相关帖子中,higher_function 在将变量传递给 lower 函数之前没有对变量进行 enquo。

谢谢

0 投票
1 回答
34 浏览

scheme - R7RS-small:quasiquoted 表达式的等价性

R7RS -small 标准,第 20-21 页的 4.2.8 Quasiquotation 部分说

相当于

但不等同于:

上面的表达式与前三个有何不同?上面所有四个表达式的计算结果都是一样的:'((1 2) 3 4 five 6).

0 投票
2 回答
67 浏览

r - R元编程:使用函数调用粘贴逻辑表达式

我想要一个粘贴逻辑表达式的功能

我还想在 ruturning 期间(而不是在函数调用中)懒惰地取消引用,理想情况下控制哪一边

我实现第一个目标的解决方案是:

两者都符合预期。

关于如何改进这段代码并实现第二个目标(在返回的表达式中取消引用),我有几个问题。

Q1。在最后一个else {...}闭包中的这一部分:

我必须使用素数符号来包装!!运算符或使用UQ函数。如果我简单地将它作为!!(dispatch(sep))或完整的功能定义作为这个

它返回错误

在全球环境中测试

工作正常,没有错误并返回TRUE。那么,为什么在我的代码中这不起作用而我必须使用<prime>!!<prime>

Q2。我必须使用逻辑运算符的前缀函数版本,因此最终表达式是对.Primitive("&").

有没有办法从函数外部传递&|作为符号,所以我得到最终表达式为expr(a == b & c > q & f < g)

简单地包装&|withensymenexpr内部函数体会产生如下错误:Error: unexpected '&' in "expr(&"

第三季度。此解决方案不支持在返回的表达式中进一步取消引用,例如

因为每个dots[[i]]都是一个单独的表达式a == b,我无法进一步分解和操作。定义不被引用的一面甚至更难完成。有什么简单的方法可以实现这一目标吗?

0 投票
1 回答
62 浏览

scheme - 修改使用 quasiquote 创建的列表是否合法?

据我了解,修改使用以下命令创建的列表是不合法的quote

使用创建的列表quasiquote呢?修改使用创建的列表是否合法quasiquote

0 投票
1 回答
25 浏览

r - 将 mutate 泛化到 tibble 的所有列

我想将这行代码推广到 tibble 的所有列:

因此,我正在考虑一个函数,该函数将具有 n 列的小标题作为输入,并应用 n-1 次连接 col1name_col1content、col2name_col2content 和最后一次与最后一列不同的连接。

我想我可以使用传统的 if 语句来完成,迭代所有列。但它会更好地做到 tidyverse 风格。我想purrr这里需要,但我无法让它工作。

另外,我肯定需要准引用来获取每次列内容之前的列名,例如gender_masculine。

0 投票
1 回答
33 浏览

r - mockery::mock 和 mockery::stub 不能与 quasiquotation 一起正常工作?

我编写了一个从 aws s3-bucket 获取单个文件的导入函数。

该函数本身是一个包装器aws.s3::s3read_using(),它将读取函数作为其第一个参数。

我为什么要绕圈aws.s3::s3read_using()?因为我需要做一些特殊的错误处理,并希望包装函数做一些Recall()达到极限......但那是另一回事。

现在我已经成功构建并测试了我的包装功能,我想做另一个包装:

我想在我的包装器上迭代 n 次以将下载的文件绑定在一起。我现在很难将 'reading_function'FUN交给aws.s3::s3read_using().

我可以通过简单地使用...- 但是!我想向包装器的 USER 说明,他需要指定该参数。

因此,我决定使用 rlangsrlang::enexpr()来捕获参数并将其交给我的第一个包装器 via !!- 作为回报,它再次捕获该参数rlang::enexpr()并最终将其交给aws.s3::s3read_using()viarlang::expr(aws.s3::s3read_using(FUN = !!reading_fn, object = s3_object))

这工作得非常好和顺利。我的问题是使用testthat和测试该函数构造mockery

这是一些广泛简化的代码:

现在,进行测试:

我使用了一个workarround,但这感觉不对,即使它有效:

我正在使用的版本R: 4.1.1 我正在使用的版本testthat(3.1.1), mockery(0.4.2),rlang(0.4.12)

0 投票
1 回答
66 浏览

haskell - 准引号转义

我想使用 Quasiquotes 将我的新语言添加到 Haskell,但语言本身|]用作关键字。

有没有办法,如何:

a) Escape |],所以它被传递给我的语言

b)让我的语言的解析器决定,什么时候准引用结束

谢谢。

0 投票
1 回答
44 浏览

haskell - 列出 Quasiquote monad 中的所有固定性声明

我想列出 Quasiquote monad 中的所有固定性声明,这样我就可以将 Haskell 语法中的所有中缀运算符传递给我的 Quasiquote 语法。

请问有什么方法template-haskell可以让我这样做吗?我找不到任何东西。

谢谢。

0 投票
1 回答
112 浏览

haskell - 如何在运行时编译 QuasiQuoter?

我有一个“QuasiQuoter”,它在 Haskell 的源代码中很有用,但也可以作为一个独立的应用程序。所以,我需要能够运行 QuasiQuoter

  1. 在 Haskell 的编译期间 -[myGrammar|someCommand|]
  2. 在 shell 的运行时(运行时编译)中 -mygrammar 'someCommand'

第一部分很简单,但如果解决为使用运行时生成的一些代码调用编译器来解决,第二部分可能会有点笨拙。

我想在 Haskell 中使用一些不错的方法来解决问题的第二部分,它不只接受源代码,而是接受 QuasyQuoter 数据类型,因此代码不那么笨拙。但我找不到任何这样的编译方法。

你知道任何?谢谢。

使用示例

哈斯克尔

该函数采用元组 [(a,b,c,d,e)] 并返回包含产品的字符串列表。

重击

该命令从 stdin csv 中读取至少 5 个数字列,并返回其产品列表(每行一个)。