问题标签 [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.
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。
谢谢
scheme - R7RS-small:quasiquoted 表达式的等价性
R7RS -small 标准,第 20-21 页的 4.2.8 Quasiquotation 部分说
相当于
和
但不等同于:
上面的表达式与前三个有何不同?上面所有四个表达式的计算结果都是一样的:'((1 2) 3 4 five 6)
.
r - R元编程:使用函数调用粘贴逻辑表达式
我想要一个粘贴逻辑表达式的功能
我还想在 ruturning 期间(而不是在函数调用中)懒惰地取消引用,理想情况下控制哪一边
我实现第一个目标的解决方案是:
和
两者都符合预期。
关于如何改进这段代码并实现第二个目标(在返回的表达式中取消引用),我有几个问题。
Q1。在最后一个else {...}
闭包中的这一部分:
我必须使用素数符号来包装!!
运算符或使用UQ
函数。如果我简单地将它作为!!(dispatch(sep))
或完整的功能定义作为这个
它返回错误
在全球环境中测试
工作正常,没有错误并返回TRUE
。那么,为什么在我的代码中这不起作用而我必须使用<prime>!!<prime>
?
Q2。我必须使用逻辑运算符的前缀函数版本,因此最终表达式是对.Primitive("&")
.
有没有办法从函数外部传递&
和|
作为符号,所以我得到最终表达式为expr(a == b & c > q & f < g)
?
简单地包装&
和|
withensym
或enexpr
内部函数体会产生如下错误:Error: unexpected '&' in "expr(&"
第三季度。此解决方案不支持在返回的表达式中进一步取消引用,例如
因为每个dots[[i]]
都是一个单独的表达式a == b
,我无法进一步分解和操作。定义不被引用的一面甚至更难完成。有什么简单的方法可以实现这一目标吗?
scheme - 修改使用 quasiquote 创建的列表是否合法?
据我了解,修改使用以下命令创建的列表是不合法的quote
:
使用创建的列表quasiquote
呢?修改使用创建的列表是否合法quasiquote
?
r - 将 mutate 泛化到 tibble 的所有列
我想将这行代码推广到 tibble 的所有列:
因此,我正在考虑一个函数,该函数将具有 n 列的小标题作为输入,并应用 n-1 次连接 col1name_col1content、col2name_col2content 和最后一次与最后一列不同的连接。
我想我可以使用传统的 if 语句来完成,迭代所有列。但它会更好地做到 tidyverse 风格。我想purrr
这里需要,但我无法让它工作。
另外,我肯定需要准引用来获取每次列内容之前的列名,例如gender_masculine。
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)
haskell - 准引号转义
我想使用 Quasiquotes 将我的新语言添加到 Haskell,但语言本身|]
用作关键字。
有没有办法,如何:
a) Escape |]
,所以它被传递给我的语言
b)让我的语言的解析器决定,什么时候准引用结束
谢谢。
haskell - 列出 Quasiquote monad 中的所有固定性声明
我想列出 Quasiquote monad 中的所有固定性声明,这样我就可以将 Haskell 语法中的所有中缀运算符传递给我的 Quasiquote 语法。
请问有什么方法template-haskell
可以让我这样做吗?我找不到任何东西。
谢谢。
haskell - 如何在运行时编译 QuasiQuoter?
我有一个“QuasiQuoter”,它在 Haskell 的源代码中很有用,但也可以作为一个独立的应用程序。所以,我需要能够运行 QuasiQuoter
- 在 Haskell 的编译期间 -
[myGrammar|someCommand|]
- 在 shell 的运行时(运行时编译)中 -
mygrammar 'someCommand'
第一部分很简单,但如果解决为使用运行时生成的一些代码调用编译器来解决,第二部分可能会有点笨拙。
我想在 Haskell 中使用一些不错的方法来解决问题的第二部分,它不只接受源代码,而是接受 QuasyQuoter 数据类型,因此代码不那么笨拙。但我找不到任何这样的编译方法。
你知道任何?谢谢。
使用示例
哈斯克尔
该函数采用元组 [(a,b,c,d,e)] 并返回包含产品的字符串列表。
重击
该命令从 stdin csv 中读取至少 5 个数字列,并返回其产品列表(每行一个)。