问题标签 [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.
macros - 为什么这个宏定义中需要@符号?
在以下when
宏中:
为什么有一个“at”@
标志?
r - rlang:quo、文档、发现的赋值形式。或者其他的东西
quo 的许多帮助页面示例都采用这样的形式,将 quo 的输出分配给 quo:
很明显,这些分配不会像通常那样覆盖 quo 函数(因为他连续两次这样做)。一流的物品,等等。
所以我对发生的事情的最好猜测是,这不是一个正常的赋值,而是 quo, quo<- 的赋值形式。但我无法获得任何有关这方面的信息。
非生产性:
getAnywhere(quo<-)
getAnywhere(`quo<-`)
getAnywhere(`quo <-`)
rlang:::quo<-
rlang:::`quo<-`
rlang:::`quo <-`
所以我希望有人能告诉我作业表格的用途和工作原理,如果我看到的不是作业表格,而是相当gnomic“[q]uo自我的某些方面,那就更是如此- 在自己的环境中进行评估。”
最后,如果在某处有此功能或用法的可访问文档,我想知道我是如何找到它的,如果没有,我可能应该告诉 Hadley。他是如何保持这么多盘子旋转而不掉下比他更多的球对我来说完全是个谜。
scala - Scalameta 起重绳
我想注入一个方法“toCSV”来将一个类解析为 CSV 字符串。我的函数有两个参数:
- 序列[字符串]:标题
- Seq[Seq[Any]] : 字段
我的宏:
变量 Term 是一个 Seq[String] 并且 quasiquotes 语法只接受一个 Term。因此,发生以下错误:
你有解决方案吗 ?
预先感谢,
haskell - 准引号中的非线性模式
我按照本教程实现了一个准引用 DSL,现在我想在引用模式中支持非线性模式。这将允许模式中的重复绑定器断言匹配数据的相等性。例如,然后可以编写eval [expr| $a + $a|] = 2 * eval a
. 我修改antiExprPat
如下:
这个想法是用来lookupValueName
检查反引号名称s
是否在范围内。如果没有,那么只需创建一个具有相同名称的活页夹。否则,创建一个视图模式 (== s) -> True
,断言匹配的数据等于已经绑定到的数据s
。本质上,我想将引用的模式转换[expr| $a + $a |]
为 Haskell 模式(Add a ((== a) -> True))
。
但这没有用。生成的 Haskell 模式是Add a a
,这意味着lookupValueName
从不认为a
在范围内。我误解了它的lookupValueName
工作原理吗?还是有更好的方法在这里实现非线性模式?
如果你想玩它,完整的代码在这里。简而言之,我正在制作一个准引用器以匹配 Java 源代码。
更新1:
正如@chi 指出的那样,lookupValueName
只检查拼接的上下文,而我需要检查拼接的内容。知道如何进行吗?
更新 2:
所以我咬紧牙关,用一个状态单子串接了一组范围内的名称,并遍历了解析树,用它替换了每个范围内的transformM
元变量:x
((== x) -> True)
它在我的输入上得到了正确的结果,但我不知道它是否正确,特别是考虑transformM
到自下而上遍历树,因此可以首先将内部元变量添加到集合中。
r - 在 R 中的 rlang 中 expr 和 expr 的类是不同的!为什么?
我不确定这里是否有人问过这个问题,但我在这里很困惑。我正在从这里阅读 Hadley Wickham 的这本很棒的书,名为 Advanced R。
这里已经描述了一个被调用的函数cement
,我对其进行了一些修改并试图理解它。
在没有任何参数的情况下运行上面的cement1
代码会将点类返回为“名称”。
但是,当我cement2
使用附加参数运行该函数时,该类返回“list”,{简单地将 class(expr(x)) 返回“name”,而 class(exprs(x)) 返回“list”}。
我不明白为什么它打印由expr
and返回的不同类exprs
。我以为我知道它们的唯一区别是,一个处理一个参数,另一个处理多个参数,但我可能错了,我可能错过了一些细节。
原始问题:所以,这一切都是从分别运行这两个函数开始的,方法是删除代码中的注释部分cement1
,cement2
当我运行函数时,下面是它们返回的输出:
所以我试图找出失败的原因cement1
,然后打印他们的课程,这就是我意识到的时候,expr
并exprs
返回不同的课程。
我的问题是:
1)它们是设计的,如果是,那为什么?或者,我正在犯一些可怕的错误,我目前无法看到。
2)cement1
如果不是这样就不能工作,正确的方法是什么?
我很抱歉句子太长,我的第一语言不是英语,因此如果有什么愚蠢的地方,请告诉我,我会纠正它。我希望这不是重复的,我试图找到答案,但我自己找不到。
谢谢你的帮助。
R 版本:3.4.2 rlang:0.2.0
haskell - Haskell QuasiQuotes Text.RawString.QQ 插值
我怎样才能像这样插值:
${ myVariable }
打印为文字,而不是插值,在这种情况下我可以做类似的插值吗?
r - dplyr() 中的非标准评估和 quasiquotation 未按(天真)预期工作
我正在尝试搜索数据库,然后"derived_name"
在下面的可重现示例中使用源自原始搜索的名称标记输出。我正在使用dplyr
管道%>%
,并且在进行准报价和/或非标准评估时遇到了麻烦。具体来说,在最终函数中使用count_colname
派生自 的字符对象无法对数据帧进行子集化。"derived_name"
top_n()
基于这个讨论,我认为上面的代码可以工作。而这篇文章引导我尝试top_n_()
,这似乎不存在。
我正在学习vignette("programming")
这有点过头了。这篇文章让我尝试了!! sym()
有效的语法,但我不知道为什么!帮助理解为什么下面的代码工作将不胜感激。谢谢。
基于@lionel 和@Tung 下面的问题和评论的其他令人困惑的示例。这里让我感到困惑的是,帮助文件说sym()
“将字符串作为输入并将它们转换为符号”和!!
“取消引用它的参数”。但是,在下面的示例中,sym(count_colname)
似乎取消引用derived_name_letr_count
. 我不明白为什么!!
需要 in !! sym(count_colname)
,因为sym(count_colname)
并qq_show(!! sym(count_colname))
给出相同的值。
r - 在嵌套函数中传递准引用参数
下面我编写了一个snafu()
计算新变量的简单函数snafu_var
。
现在我想嵌套snafu()
在另一个函数foobar()
中,该函数将利用snafu()
.
我在两个方面苦苦挣扎(可能相关):
1) 内的嵌套函数foobar()
似乎无法访问提供给 的参数foobar()
,从而导致错误消息:
2)一旦我让嵌套函数工作,我怎么能snafu_var
在函数内调用它的输出foobar()
?
这只是一个更复杂的嵌套函数的代表,但解决我的问题的关键是函数是嵌套的,并且由嵌套函数创建的变量snafu()
,被父函数使用,foobar()
。
r - 在列表定义中使用 rlang::sym
我正在编写一个 R 脚本,我需要允许用户指定将手动处理的变量的名称,即
一般来说,我指的是使用rlang::sym
和引用/取消引用机制。但是,我需要使用tidyr::replace_na
并且我的想法在这里都不起作用,因为变量的名称必须在list
.
var
在这种情况下我该如何参考我的?我在想像下面这样的事情:
但它没有用...
r - 为什么我不能取消引用这个quosure?
我正在阅读有关准引用的一些注释: https ://dplyr.tidyverse.org/articles/programming.html 。
在我第一次阅读之后,我尝试了一些东西。特别是让我感到困惑的是:
太好了,我已经创建了一个quosure!然后我想
将立即计算表达式,产生“foo”。虽然很自然,但这是错误的!
我不明白为什么。我错过了什么?
运行:R 版本 3.5.1 (2018-07-02) -- "Feather Spray" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit)
软件包 rlang 版本:0.2.1