Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中,捕获作为裸符号传递给函数的函数参数_Javascript - Fatal编程技术网

在javascript中,捕获作为裸符号传递给函数的函数参数

在javascript中,捕获作为裸符号传递给函数的函数参数,javascript,Javascript,我喜欢编写一个函数,它接受一个点参数,捕获作为符号传递的元素,并将它们作为字符串 是否可以将这些…参数作为符号传递,并捕获函数的输入 为了清楚起见,我想写下: function myFunc(...args) { // capture the ...args }; myFunc(a, b, c); ["a", "b", "c"] 背景故事 在R中,您可以使用延迟求值并捕获传递给函数的符号,而不进行求值,并将其转换为字符串: 库(rlang) x(c、def、ghijk) “c”“def”

我喜欢编写一个函数,它接受一个点参数,捕获作为符号传递的元素,并将它们作为字符串

是否可以将这些…参数作为符号传递,并捕获函数的输入

为了清楚起见,我想写下:

function myFunc(...args) {
  // capture the ...args 
};
myFunc(a, b, c);
["a", "b", "c"]
背景故事 在R中,您可以使用延迟求值并捕获传递给函数的符号,而不进行求值,并将其转换为字符串:

库(rlang)
x(c、def、ghijk)
“c”“def”“ghijk”
这就是我想用JavaScript重现的内容。这行得通吗?

不行


变量的值被传递给函数。它永远不会看到您从中复制的变量名。

您不能像问题中所表达的那样执行此操作。一种接近的方法是传入一个对象,该对象带有以变量命名的键。语法非常接近您已经在做的事情:

函数myFunc(args){
console.log(Object.keys(args))
};
设a=1;
设b=2;
设c=3;
myFunc({a,b,c})
在R中使用它的方式是,例如,当您想要从数据帧中提取列时。“引号”是字符变量,符号是列。所以过滤器(df,column==“char”),而不是过滤器(df,column==“char”)

您提供的语法可以非常精确地复制,
filter(df,column==“char”)
我不确定数据帧的结构到底是什么,也不确定过滤逻辑是什么,但在您的示例中,第二个参数本质上是一个谓词,可以使用箭头函数在JavaScript中编写谓词,就像这样

function filter(obj, predicate) {
  predicate(obj) // <--- apply the predicate to the object
}

filter(df, obj => obj.column === "char")
函数过滤器(obj,谓词){
谓词(obj)//obj.column==“char”)

我的意思是,这到底有什么意义?你不能在你传递的值周围加上双引号,然后用它来完成吗?JavaScript和许多其他语言一样,将函数调用中的参数视为要求值的表达式。即使表达式只是对变量的裸引用,表达式也会求值,而值在所有情况下都是如此。@AvinKavish我知道我可以做到这一点。我正在根据我对其他语言元编程的了解来探索JS元编程功能。在R中使用它的方式是,例如,当您想从数据帧提取列时。一个“引号”是一个字符变量,一个符号是一列。所以filter(df,column==“char”),而不是filter(df,column==“char”)。@Pointy谢谢。我的印象是参数并不总是被计算的,例如,你可以用一个从未计算过的参数运行一个函数,它可以工作:function myFunc(a){return(1+2)};myFunc();例如,不抛出任何错误。@ColinFAY-well JavaScript对此一无所知;它总是计算参数表达式。请使用语法正确但有运行时错误的表达式(如
未定义的
属性引用或其他内容)尝试该函数调用。它必须评估参数表达式,因为它们可能有副作用。这与此处发布的问题有什么关系?您如何获得OP要求的示例输出?这不是他想要的,如果您阅读评论部分,他提到他尝试复制的语法是
过滤器(df,column==“char”)
。好的,那么您如何让您的代码打印出传递给函数的变量名称呢?据我所知,这是一个人为的例子,他实际上并不想在屏幕上打印它们。实际的用例是“在R中使用它的方式是,例如,当您想从数据帧中提取列时。”他继续显示谓词
column==”字符“
。在Js中,我们确实将谓词编写为箭头函数,只是不使用符号。谢谢。这确实没有回答最初的问题,但这确实很有用。再次感谢你们,我将深入探讨这一点。