我试图在函数组合中获取int sumOfHammingDistance(vector<unsigned>& nums) {
int n = sizeof(unsigned) * 8;
int len = nums.size();
vector<int> countOfOnes(n, 0);
for (int i = 0; i < len; i++) {
for (int j = 0; j < n; j++) {
countOfOnes[j] += (nums[i] >> j) & 1;
}
}
int sum = 0;
for (int count: countOfOnes) {
sum += count * (len - count);
}
return sum;
}
中的名称和表达式列表。让我们假设一个函数:
...
如果我们打电话:
g <- function(...) {
print(as.list(match.call(expand.dots = FALSE))$...)
}
我们得到:
g(rnorm(5), par = "a", 4 + 4)
它很好:我们可以为每个参数获取表达式调用并验证。但我需要这个但是在功能组合:
[[1]]
rnorm(5)
$par
[1] "a"
[[3]]
4 + 4
但我明白了:
f <- function(...) g(...)
f(rnorm(5), par = "a", 4 + 4)
我正在阅读一些章节http://adv-r.had.co.nz/Expressions.html,但我还无法找到解决方案。我知道,我需要科普学习。
任何提示?提前谢谢。
答案 0 :(得分:4)
如果您只想要参数,则不需要整个通话。只需使用substitute()
即可访问...
而不是match.call
g <- function(...) {
print(substitute(...()))
}
f <- function(...) g(...)
f(rnorm(5), par = "a", 4 + 4)
# [[1]]
# rnorm(5)
#
# $par
# [1] "a"
#
# [[3]]
# 4 + 4
g <- function(...) {
print( eval(substitute(alist(...))))
}