You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让cli::cli_abort()解析动态参数及传入的CLI标记内容?

解决cli::cli_abort未解析传入参数中cli标记的问题

你的问题核心是:传入的msg参数包含cli的格式化标记(比如{.var x}),但cli_abort只是将其作为普通字符串拼接,没有解析这些标记。可以通过以下两种方式解决:

方法一:先解析传入的msg再拼接

使用cli::cli_format()提前解析msg中的cli标记,再将解析后的内容传入cli_abort:

f <- function(msg){
  parsed_msg <- cli::cli_format(msg)
  cli::cli_abort("{parsed_msg} xxx")
}

f(msg = "{.var x}")
# 输出会正确解析{.var x},显示为带样式的变量名x加上xxx

方法二:通过表达式注入传递标记

让msg以表达式形式传入,再用rlang::inject()在cli_abort中注入并解析:

library(rlang)

f <- function(msg){
  cli::cli_abort(inject("{!!msg} xxx"))
}

# 调用时直接传入cli标记表达式
f(msg = {.var x})
# 或者用quote包裹
f(msg = quote({.var x}))

原代码失效原因

当你将"{.var x}"作为字符串传给msg后,cli_abort("{msg} xxx")只会把msg的字符串值直接插入模板,不会递归解析其中的cli标记——cli的模板解析仅处理当前字符串内的标记,不会对插入的字符串内容二次解析。

内容的提问来源于stack exchange,提问作者sparklink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:21:08