标签: variadic-functions

PHP:通过引用的可变长度参数列表?

是否可以创建一个PHP函数,通过引用获取所有参数的可变数量的参数?

它没有帮助我通过引用接收一个值数组的函数,也没有一个函数将其参数包含在一个对象中,因为我正在处理函数组合和参数绑定.不要考虑呼叫时间传递参考.那东西甚至不应该存在.

php parameter-passing pass-by-reference variadic-functions function-parameter

24
推荐指数
2
解决办法
4625
查看次数

是否有针对slf4j的Java 1.5 varargs API?

我想摆脱这一批......

public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);
Run Code Online (Sandbox Code Playgroud)

......并用这个替换它......

public void info(String format, Object ... args);
Run Code Online (Sandbox Code Playgroud)

...这样我的日志记录语法就不必根据我想记录的参数数量而改变.似乎有很多讨论和解决方法,但它在哪里?或者我应该包装slf4j的包装器?

java logging variadic-functions slf4j

24
推荐指数
5
解决办法
3569
查看次数

javascript适用于构造函数,抛出"格式错误的形式参数"

感谢对这个问题的精彩回答,我理解如何用varargs调用javascript函数.

现在我正在寻找使用构造函数的应用程序

在这篇文章中找到了一些有趣的信息.

但我的代码是错误的

尝试1:

var mid_parser = new Parser.apply(null, mid_patterns);
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: Function.prototype.apply called on incompatible [object Object]
Run Code Online (Sandbox Code Playgroud)

尝试2:尝试1:

var mid_parser = new Parser.prototype.apply(null, mid_patterns);
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: Function.prototype.apply called on incompatible [object Object]
Run Code Online (Sandbox Code Playgroud)

尝试2:

function Parser()
{
    this.comparemanager = new CompareManager(arguments);
}

mid_patterns = [objA,objB,objC]
var mid_parser = new Parser();
Parser.constructor.apply(mid_parser, mid_patterns);
Run Code Online (Sandbox Code Playgroud)

错误:

syntax_model.js:91: SyntaxError: malformed formal parameter
Run Code Online (Sandbox Code Playgroud)

尝试3:

var mid_parser = Parser.apply(null, mid_patterns);
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: this.init is undefined // init is a function …
Run Code Online (Sandbox Code Playgroud)

javascript constructor variadic-functions

24
推荐指数
3
解决办法
5984
查看次数

如何使用varargs和反射

简单的问题,如何使这段代码工作?

public class T {

    public static void main(String[] args) throws Exception {
        new T().m();
    }

    public // as mentioned by Bozho
    void foo(String... s) {
        System.err.println(s[0]);
    }

    void m() throws Exception {
        String[] a = new String[]{"hello", "kitty"};
        System.err.println(a.getClass());
        Method m = getClass().getMethod("foo", a.getClass());
        m.invoke(this, (Object[]) a);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

class [Ljava.lang.String;
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
Run Code Online (Sandbox Code Playgroud)

java reflection variadic-functions

24
推荐指数
2
解决办法
2万
查看次数

Groovy从List转换为var args进行方法调用

我正在使用一个提供电子邮件功能的插件,如下所示:

class SendSesMail {

    //to
    void to(String ... _to) { 
        this.to?.addAll(_to)
        log.debug "Setting 'to' addresses to ${this.to}"
    }

}
Run Code Online (Sandbox Code Playgroud)

文档声明该类的调用如下:

sesMail {
    from "from@a.com"
    replyTo "reply@a.com"
    to "t@a.com", "t@b.com", "t@c.com"
    subject "Subject"
    html "Body HTML"
}
Run Code Online (Sandbox Code Playgroud)

在代码List中建立了一个地址,我试图找出如何将此列表转换为该方法所期望的var args.

转换为String与","连接不起作用,因为这是一个无效的电子邮件地址.我需要能够将每个List项分成一个单独的参数,以避免迭代List并单独发送每封电子邮件.

groovy list variadic-functions

24
推荐指数
1
解决办法
1万
查看次数

为什么Java的主要不使用变长参数列表?

我有一个关于Java main声明的语法的问题:

public static void main (String[] args)
Run Code Online (Sandbox Code Playgroud)

由于在调用main函数时可以传递可变数量的字符串,这不应该是变量长度参数列表而不是数组吗?为什么使用字符串参数列表对此方法进行命令行调用甚至可以工作?(除非有幕后处理用字符串列表构建数组,然后将该数组传递给main方法......?)主要声明不应该更像这样......? -

public static void main(String... args) 
Run Code Online (Sandbox Code Playgroud)

java program-entry-point variadic-functions

23
推荐指数
4
解决办法
6849
查看次数

递归构建可变参数函数的返回类型时的奇怪行为

这可能是一个非常简单的解释,但是如果我错了,我会尽可能多地给出背景故事.对于如此冗长而道歉.我正在使用gcc4.5,并且我意识到c ++ 0x支持仍然有点实验性,但我将假设我所看到的行为存在非bug相关的原因.

我正在尝试使用可变参数函数模板.最终目标是建立一个缺点std::pair.它不是一个自定义类型,只是一对配对对象.构造列表的函数必须以某种方式递归,最终返回值取决于递归调用的结果.作为附加扭曲,连续参数在插入列表之前被添加在一起.所以如果我通过[1,2,3,4,5,6],最终结果应该是{1 + 2,{3 + 4,5 + 6}}.

我最初的尝试相当天真.一个函数,Build,有两个重载.一个人拿了两个相同的参数,然后简单地返回它们 另一个采用了两个参数和一个参数包.返回值是一对由两个设置参数和递归调用之和组成.回想起来,这显然是一个有缺陷的策略,因为当我试图找出它的返回类型时,函数没有被声明,所以它别无选择,只能解析为非递归版本.

我明白了 我困惑的地方是第二次迭代.我决定让这些函数成为模板类的静态成员.函数调用本身不是参数化的,而是整个类.我的假设是,当递归函数尝试生成其返回类型时,它将使用自己的静态函数实例化整个新版本的结构,并且所有内容都可以自行运行.

结果是:"错误:没有匹配函数来调用BuildStruct<double, double, char, char>::Go(const char&, const char&)"

违规代码:

static auto Go(const Type& t0, const Type& t1, const Types&... rest)
    -> std::pair<Type, decltype(BuildStruct<Types...>::Go(rest...))>
Run Code Online (Sandbox Code Playgroud)

我的困惑来自于这样的事实:参数BuildStruct应始终与发送的参数类型相同BuildStruct::Go,但在错误代码Go中缺少最初的两个双参数.我在这里错过了什么?如果我最初关于如何选择静态函数的假设是不正确的,为什么它试图调用错误的函数而不是根本找不到函数?它似乎只是混合类型,而且我无法想出为什么.如果我在初始调用中添加其他参数,它总是在失败之前向下挖掘到最后一步,因此假设递归本身至少部分工作.这与初始尝试形成鲜明对比,初始尝试始终无法立即找到函数调用.

最终,我已经解决了这个问题,一个相当优雅的解决方案,几乎不像前两次尝试.所以我知道如何做我想做的事.我正在寻找我所看到的失败的解释.

完整的代码,因为我确信我的口头描述不足.首先是一些样板文件,如果您觉得有必要执行代码并亲自查看它.然后是合理失败的初始尝试,然后是第二次尝试,但没有.

#include <iostream>
using std::cout;
using std::endl;

#include <utility>

template<typename T1, typename T2>
std::ostream& operator <<(std::ostream& str, const std::pair<T1, T2>& p) {
  return str << "[" << p.first << ", " << p.second << …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-functions c++11

23
推荐指数
1
解决办法
1730
查看次数

lambda中的varargs在Python中起作用

lambda函数是否有可能具有可变数量的参数?例如,我想编写一个元类,它为其他类的每个方法创建一个方法,这个新创建的方法返回原始方法的相反值,并且具有相同数量的参数.我想用lambda函数做到这一点.如何传递参数?可能吗?

class Negate(type):
    def __new__(mcs, name, bases, _dict):
        extended_dict = _dict.copy()
        for (k, v) in _dict.items():
            if hasattr(v, '__call__'):
                extended_dict["not_" + k] = lambda s, *args, **kw:  not v(s, *args, **kw)
        return type.__new__(mcs, name, bases, extended_dict)

class P(metaclass=Negate):
    def __init__(self, a):
        self.a = a

    def yes(self):
        return True

    def maybe(self, you_can_chose):
        return you_can_chose
Run Code Online (Sandbox Code Playgroud)

但结果完全错了:

>>>p = P(0)
>>>p.yes()
True
>>>p.not_yes()     # should be False
Traceback (most recent call last):
  File "<pyshell#150>", line 1, in <module>
    p.not_yes()
  File "C:\Users\Desktop\p.py", line 51, …
Run Code Online (Sandbox Code Playgroud)

python lambda variadic-functions

23
推荐指数
2
解决办法
2万
查看次数

如何在gcc中实现变量参数?

int max(int n, ...)
Run Code Online (Sandbox Code Playgroud)

我正在使用cdecl调用约定,其中调用者在被调用者返回后清理变量.

我想知道怎么做宏va_end,va_startva_arg工作?

调用者是否将参数数组的地址作为max的第二个参数传递?

c gcc variadic-functions calling-convention

23
推荐指数
2
解决办法
1万
查看次数

在数据库行中在Golang中创建一个Map

基本上在执行查询之后我想获取结果行并生成一个[]map[string]interface{},但我不知道如何使用API​​执行此操作,因为该Rows.Scan()函数需要一个特定数量的参数来匹配所请求的列数(可能还有类型)以及)正确获取数据.

同样,我想概括这个调用并接受任何查询并将其转换为a []map[string]interface{},其中map包含映射到该行的值的列名.

这可能非常低效,我计划稍后更改结构,这interface{}是单个数据点的结构.

我如何仅使用database/sql包,或者如果需要使用database/sql/driver包?

database variadic-functions go

23
推荐指数
1
解决办法
2万
查看次数