标签: argument-passing

函数指针作为参数

是否可以将函数指针作为参数传递给C中的函数?

如果是这样,我将如何声明和定义一个以函数指针作为参数的函数?

c function-pointers argument-passing

39
推荐指数
3
解决办法
8万
查看次数

有没有办法在R中的函数中使用两个'...'语句?

我想编写调用两种功能:plot()legend(),这将是理想的,如果用户可以指定一些额外的参数,然后可通过要么通过plot()legend().我知道我可以使用...以下两种函数之一实现此目的:

foo.plot <- function(x,y,...) {
    plot(x,y,...)
    legend("bottomleft", "bar", pch=1)
}

foo.plot(1,1, xaxt = "n")
Run Code Online (Sandbox Code Playgroud)

这传递xaxt = "n"给情节.但是有没有办法title = "legend"legend()没有预先指定函数头中的参数的情况下将eg传递给调用?


从接受的答案中更新:我认为VitoshKa的方式是实现我想要的最优雅的方式.但是,我必须解决一些小问题,直到它按照我想要的方式工作.

首先,我检查了我要传递给legend哪个参数以及哪个参数plot.为此目的的第一步是查看哪些参数legend是独特的,legend而不是绘图和/或参数的一部分:

legend.args <- names(formals(legend))
plot.args <- c(names(formals(plot.default)), names(par()))
dput(legend.args[!(legend.args %in% plot.args)])
Run Code Online (Sandbox Code Playgroud)

dput()在这里使用,因为该行plot.args <- c(names(formals(plot.default)), names(par()))总是调用一个我不想要的新空图.所以,我使用dput了以下函数的输出.

接下来,我不得不处理重叠的参数(通过它们获取dput(largs.all[(largs.all %in% pargs.all)])).对于一些这是微不足道的(例如x,y)等获得通过这两个功能(例如,pch).但是,在我的实际应用程序中,我甚至使用其他策略(例如,不同的变量名称adj,但在此示例中未实现).

最后, …

r function argument-passing optional-arguments

37
推荐指数
3
解决办法
2812
查看次数

Postgres整数数组作为参数?

据我所知,在Postgres pure中,您可以将整数数组传递给函数,但.NET数据提供程序Npgsql不支持这种情况.

我目前有一个DbCommand,我在其中加载对存储过程的调用,添加参数并执行标量以获取用于填充对象的Id.

现在需要将n个整数作为参数.这些用于创建子记录,将新创建的记录通过它的id链接到整数参数.

理想情况下,我不必为每个整数在我的DbCommand上进行多次ExecuteNonQuery调用,因此我将构建一个csv字符串作为将在数据库端拆分的参数.

我通常生活在使用Db抽象的LINQ 2 SQL中,使用手动数据访问来处理这个项目它只是变得有点脏,人们通常如何将这些参数传递给postgres?

arrays postgresql argument-passing

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

在shell脚本之间传递参数但保留引号

如何将一个shell脚本的所有参数传递给另一个?我已经尝试了$*,但正如我所料,如果你引用了参数,那就不行了.

例:

$ cat script1.sh

#! /bin/sh
./script2.sh $*

$ cat script2.sh

#! /bin/sh
echo $1
echo $2
echo $3

$ script1.sh apple "pear orange" banana
apple
pear
orange
Run Code Online (Sandbox Code Playgroud)

我希望它打印出来:

apple
pear orange
banana
Run Code Online (Sandbox Code Playgroud)

shell argument-passing

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

使用带有fallthrough的开关来处理Javascript中的默认参数是一个好主意吗?

我最近了解到,您可以使用带有fallthrough的简洁switch语句在Javascript中设置默认参数值:

function myFunc(arg1, arg2, arg3) {
    //replace unpassed arguments with their defaults:
    switch (arguments.length) {
        case 0 : arg1 = "default1";
        case 1 : arg2 = "default2";
        case 2 : arg3 = "default3";
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经成长为喜欢它,因为它不仅非常短,而且它也基于实际传递的参数而工作,而不依赖于一个特殊的值类(null,falsy等)作为占位符,就像在更传统的版本:

function myFunc(arg1, arg2, arg3){
    //replace falsy arguments with their defaults:
    arg1 = arg1 || "default1";
    arg2 = arg2 || "default2";
    arg3 = arg3 || "default3";
}
Run Code Online (Sandbox Code Playgroud)

我看到使用开关的版本之后我的初衷是我应该考虑在||版本上"默认"使用它.

开关虽然不会长得多,但它具有更加"稳健"的优点,因为它不关心参数的类型.在一般情况下,每当我必须使用默认参数创建函数时,不必担心所有伪值('',0,null,false ...)会发生什么,这听起来是个好主意.

然后,我会保留arg = arg || x实际情况,我想检查真实性,而不是将其重新用作参数默认的一般规则.

但是,当我进行代码搜索时,我发现这种模式的例子很少,所以我不得不戴上我的怀疑帽.为什么我没有找到这个成语的更多例子? …

javascript default-value argument-passing

28
推荐指数
2
解决办法
1114
查看次数

在PHP中将实例方法作为参数传递

我想创建一个Listener类

class Listener {
    var $listeners = array();

    public function add(callable $function) {
        $this->listeners[] = $function;
    }

    public function fire() {
        foreach($this->listeners as $function) {
            call_user_func($function);
        }
    }
}

class Foo {
    public function __construct($listener) {
        $listener->add($this->bar);
    }

    public function bar() {
        echo 'bar';
    }
}



$listener = new Listener();
$foo = new Foo($listener);
Run Code Online (Sandbox Code Playgroud)

但是此代码失败并出现此错误:

注意:未定义的属性:第18行的index.php中的Foo :: $ bar

可捕获的致命错误:传递给Listener :: add()的参数1必须是可调用的,给定null,在第18行的index.php中调用,在第5行定义index.php

我究竟做错了什么?

php methods class argument-passing

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

是否有一个Scala等效的Python列表解包(又名"*")运算符?

在Python中,我们有星号(或"*"或"unpack")运算符,它允许我们解压缩列表以方便用于传递位置参数.例如:

range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)
Run Code Online (Sandbox Code Playgroud)

在这个特定的例子中,它不会节省太多的输入,因为range只需要两个参数.但你可以想象,如果有更多的参数range,或者args是从输入源读取,从另一个函数返回等等,那么这可能会派上用场.

在Scala中,我找不到相应的东西.请考虑在Scala交互式会话中运行以下命令:

case class ThreeValues(one: String, two: String, three: String)

//works fine
val x = ThreeValues("1","2","3")

val argList = List("one","two","three")

//also works
val y = ThreeValues(argList(0), argList(1), argList(2))

//doesn't work, obviously
val z = ThreeValues(*argList)
Run Code Online (Sandbox Code Playgroud)

除了使用的方法之外,还有更简洁的方法val y吗?

python scala argument-passing

22
推荐指数
3
解决办法
9500
查看次数

如何通过点击PyQt中的按钮将参数传递给函数?

我想在单击按钮时将参数传递给函数.我应该在这一行添加什么,button.connect(button, QtCore.SIGNAL('clicked()'), calluser(name))以便将值传递给函数:

def calluser(name):
    print name

def Qbutton():
    button = QtGui.QPushButton("button",widget)
    name = "user"
    button.setGeometry(100,100, 60, 35)
    button.connect(button, QtCore.SIGNAL('clicked()'), calluser(name))
Run Code Online (Sandbox Code Playgroud)

还有一件事,按钮将使用for循环生成; 所以name价值会有所不同.所以我想用按钮附上每个名字.我在Pytk中做了同样的事情,使用for循环并在单击时调用参数基函数.

python arguments function argument-passing pyqt4

21
推荐指数
5
解决办法
6万
查看次数

传递参数django信号 - post_save/pre_save

我正在研究Django 1.6中的通知应用程序,我想将其他参数传递给Django信号,例如post_save.我尝试使用functools的部分但没有运气.

from functools import partial
post_save.connect(
    receiver=partial(notify,
        fragment_name="categories_index"),
            sender=nt.get_model(),
            dispatch_uid=nt.sender
    )
Run Code Online (Sandbox Code Playgroud)

notifyfunction有一个关键字参数fragment_name,我希望在我的信号中默认传递.

有什么建议?

django signals argument-passing

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

在Java中将其作为参数传递时创建数组

有没有办法创建一个对象数组作为构造函数或方法的一部分?我真的不确定怎么说这个,所以我举了一个例子.我有一个枚举,其中一个字段是数字数组.这是我尝试过的:

public enum KeyboardStuff {

    QWERTY(1, {0.5f, 1.3f, 23.1f}, 6);
    DVORAK(5, {0.1f, 0.2f, 4.3f, 1.1f}, 91);
    CHEROKEE(2, {22.0f}, 11);

    private int number, thingy;
    private float[] theArray;

    private KeyboardStuff(int i, float[] anArray, int j) {
        // do things
    }

}
Run Code Online (Sandbox Code Playgroud)

编译器说括号{}无效,应该删除.有没有一种方法可以将数组作为参数传递而不事先创建对象数组?

java arrays parameters arguments argument-passing

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