我正在努力解决一个被承认但我尚未找到一个简单解决方案的问题:当函数定义包含省略号或三个点时,如何捕获传递给R函数的错误指定的参数{{ 1}}。
如Wickham的 Advanced R 所述:
使用
...
需要付出代价 - 任何拼写错误的参数都不会引发 错误,...
之后的任何参数必须完全命名。这使得 打字错误容易被忽视。
以下是一个例子:
...
在这里,myfun <- function(x, ...)
UseMethod("myfun")
myfun.character <- function(x, toLower = FALSE, ...)
cat("Sent and transformed by myfun:", ifelse(toLower, tolower(x), x), "\n")
myfun("Test String with CaPiTaLs.")
## Sent and transformed by myfun: Test String with CaPiTaLs.
myfun("Test String with CaPiTaLs.", toLower = TRUE)
## Sent and transformed by myfun: test string with capitals.
myfun("Test String with CaPiTaLs.", tolower = TRUE)
## Sent and transformed by myfun: Test String with CaPiTaLs.
myfun("Test String with CaPiTaLs.", toLower = TRUE, notDefined = 1)
## Sent and transformed by myfun: test string with capitals.
的微妙拼写错误导致没有明显的错误,除非输出失败是小写的,正如用户可能期望的那样。在最后一个例子中,用户认为可以起作用的参数不是,但由于toLower
的性质,它们只是消失在以太中。
当然,我可以检查...
到...
的内容,但我想知道是否有更好的方法,与函数中定义的形式或{{1}中定义的形式相关联传递。
顺便说一下,有人知道我们应该叫list(...)
吗?我几乎可以肯定我在Julia文档中看到了一个带有名字的引用,但现在找不到了它!
加了:
理想情况下,如果参数不是应该在省略号中传递的,当被调用函数范围内的某些内容通过省略号传递给我时,我想找出生成错误的最佳方法。一个辅助论点。例如,如何最好地捕获这些错误:
...
答案 0 :(得分:1)
我不会返回错误。警告应该足够了。像这样:
<ui:repeat >
<p:row>
<c:set var="campo" value="bean.filter.#{colunaAnalitico.value}"/>
<p:column style="width: 2%">
<p:selectBooleanCheckbox label="#{colunaAnalitico.key}" value="#{campo}"/>
</p:column>
<p:column>
<p:outputLabel value="#{campo}"/>
</p:column>
</p:row>
</ui:repeat>
我不认为最后一个应该警告。你应该避免使用位置参数匹配,如果你在那里使用名称匹配,你会得到一个错误,你需要抓住它。