标签: argument-passing

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

Javascript:将多个参数作为单个变量传递

是否可以使用单个变量传递多个参数?例如,如果我想做类似的事情:

function foo(x,y){
    document.write("X is " + x);
    document.write("Y is " + y);
}

var bar = "0,10";
foo(bar);
Run Code Online (Sandbox Code Playgroud)

上面的例子是我试图做的简化示例.它不起作用(因为"bar"被检测为单个参数).我知道有更简单的方法可以使用数组来实现它.

所以,我主要是出于好奇而问这个问题 - 是否有可能将"bar"变量检测为不是一个,而是两个参数?

谢谢!

javascript argument-passing

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

CodeIgniter:从视图传递参数到控制器?

编辑:现在使用下面的代码,我不确定如何正确打印书签和标签


我是CI的新手,我最近遇到了障碍.我不确定如何将视图文件中的函数参数传递给控制器​​,以便我可以在函数上使用它?

我在视图上有一个foreach循环,它遍历函数get_latest_bookmarks传递的所有项目.该函数返回每个项目的ID,我希望将其与另一个名为get_bookmark_tags的函数一起使用,该函数将从另一个表中获取书签的标签.我已经提供了我到目前为止所做的代码.

模型:

<?php 

class Bookmark_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function get_latest_bookmarks($limit) 
    {
        // Load Database
        $this->load->database();
        // Query Database 
        $query = $this->db->get('Bookmark', $limit);
        // Return Result
        return $query;
    }

    function get_bookmark_tags($id)
    {
        // Load Database
        $this->load->database();
        $query = $this->db->query('SELECT Tag.Title 
                                    FROM `Tag` 
                                    INNER JOIN BookmarkTag
                                    WHERE BookmarkTag.BookmarkID = "'.$id.'" AND Tag.TagID = BookmarkTag.TagID');
        return $query;
    }
Run Code Online (Sandbox Code Playgroud)

控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function …
Run Code Online (Sandbox Code Playgroud)

php controller codeigniter view argument-passing

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

LLVM中的参数转发

我需要一些关于向被调用方"转发"参数的建议(在LLVM-IR中).

假设我有一个在模块F所有其他函数开头调用的函数.从F我需要访问(读取)传递给其直接调用者的参数.

现在要做到这一点,我在结构中的调用者中包含所有参数,并将i8*指针传递给结构F,以及一个标识符,告诉调用哪个调用者F.F然后有一个巨大的开关,分支到适当的拆箱代码.必须这样做,因为模块中的函数具有不同的签名(不同的参数/返回值计数和类型;甚至不同的调用约定),但它显然是次优的(从性能和代码大小的角度来看)因为我需要在堆栈上分配结构,复制其中的参数,传递一个额外的指针F,然后执行拆箱.

我想知道是否有更好的方法来做到这一点,即从函数访问其直接调用者的堆栈帧的方法(知道,由于标识符,调用函数的调用者),或者更一般地,任意在其直接调用者中定义的值.有什么建议?

注意:我正在研究的重点是拥有完成所有这一切的单一功能F; 拆分/内联/专门化/模板化F不是一种选择.


澄清一下,假设我们有以下功能FuncAFuncB(注意:以下只是伪C代码,永远记住我们在谈论LLVM-IR!)

Type1 FuncA(Type2 ArgA1) {
  F();
  // ...
}

Type3 FuncB(Type4 ArgB1, Type5 ArgB2, Type6 ArgB3) {
  F();
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我需要的是一个有效的方法F来执行以下功能:

void F() {
  switch (caller) {
    case FuncA:
      // do something with ArgA1
      break;
    case FuncB:
      // do something with …
Run Code Online (Sandbox Code Playgroud)

performance callstack function llvm argument-passing

7
推荐指数
1
解决办法
324
查看次数

在R中使用callNextMethod()传递参数的问题

我的问题:

为什么callNextMethod()不按预期将参数传递给下一个方法?

情况:

假设我有两个分层类foobar(bar是它的子类foo),我有一个foobar可以为两个类分派的方法(即,有两个类的方法).

此外,(子)类bar的方法foo在进行一些计算之后调用该方法callNextMethod().

两种方法都有相同的附加参数(默认值)应该传递给方法foo,只有它是相关的.

setClass("foo", representation(x = "numeric"))
setClass("bar", contains = "foo")

setGeneric("foobar", function(object, ...) standardGeneric("foobar"))

setMethod("foobar", "foo", function(object, another.argument = FALSE, ...) {
    print(paste("in foo-method:", another.argument))
    if (another.argument) object@x^3
    else object@x^2
})

setMethod("foobar", "bar", function(object, another.argument = FALSE, ...) {
    print(paste("in bar-method:", another.argument))
     object@x <- sqrt(object@x)
    callNextMethod()
})
Run Code Online (Sandbox Code Playgroud)

问题描述:
参数未按预期传递,但默认值取自方法定义.具体来说,在第一种方法中,参数是在call(TRUE)中指定的,但是,它会FALSE在下一个方法中更改.

o1 <- new("bar", …
Run Code Online (Sandbox Code Playgroud)

oop methods r argument-passing s4

7
推荐指数
1
解决办法
668
查看次数

void指针作为参数

以下C片段:

[...] 
void f1(void* a){
  printf("f(a) address = %p \n",a);
  a = (void*)(int*)malloc(sizeof(int));

  printf("a address = %p \n",a);
  *(int*)a = 3;

  printf("data = %d\n",*(int*)a);
}

void f(void){
  void* a1=NULL;
  printf("a1 address = %p \n",a1);

  f1(a1);

  printf("a1 address = %p \n",a1);
  printf("Data.a1 = %d\n",*(int*)a1);
}
[...]
Run Code Online (Sandbox Code Playgroud)

结果是

a1 address = (nil) 
f(a) address = (nil) 
a address = 0xb3f010 
data = 3
a1 address = (nil) 
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

为什么不在a1函数中保留已分配给它的地址?

c pointers arguments void-pointers argument-passing

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

如何将任意方法(或委托)作为参数传递给函数?

我需要能够将任意方法传递给某个函数myFunction:

void myFunction(AnyFunc func) { ... }
Run Code Online (Sandbox Code Playgroud)

应该可以使用其他静态,实例,公共或私有方法甚至委托来执行它:

myFunction(SomeClass.PublicStaticMethod);
myFunction(SomeObject.PrivateInstanceMethod);
myFunction(delegate(int x) { return 5*x; });
Run Code Online (Sandbox Code Playgroud)

传递方法可以具有任意数量的参数和任何返回类型.还应该可以myFunction通过反射了解参数的实际数量及其类型.会是什么AnyFuncmyFunction定义,以适应这样的要求?有几个重载的版本是可以接受的myFunction.

c# delegates argument-passing

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

bash字符串引用了多字args到数组

问题:

在bash脚本编写中,将包含多个单词的文字引号的字符串转换为具有相同解析参数结果的数组的最佳方法是什么?

争议:

存在许多问题,都是采用规避策略来避免问题而不是寻找解决方案,这个问题提出了以下论点,并希望鼓励读者关注论点,如果你愿意接受它,就要参与挑战,找到最佳选择.解.

提出的论点:

  1. 虽然有许多情况应该避免这种模式,因为存在更适合的替代解决方案,但作者认为仍然存在有效的用例.这个问题将尝试产生一个这样的用例,但不要仅仅认为它是可以想象的场景,它可能出现在现实世界的情况中.
  2. 您必须找到满足要求的最佳解决方案.该用例是专门针对其实际应用而选择的.您可能不同意所做出的决定,但并不负责仅提供解决方案的意见.
  3. 在不修改输入或选择运输的情况下满足要求.两者都是通过现实场景特别选择来捍卫这些部分不受你控制的叙述.
  4. 特定问题没有答案,这个问题旨在解决这个问题.如果您倾向于避免这种模式,那么只需避免这个问题,但如果您认为自己已经接受了挑战,那么请看看您将如何解决问题.

有效用例:

转换当前正在使用的现有脚本,以通过命名管道或类似流接收参数.为了最大限度地减少对开发人员控制之外的无数脚本的影响,决定不更改接口.现有脚本必须能够像以前一样通过新流实现传递相同的参数.

现有实施:

$ ./string2array arg1 arg2 arg3
args=(
    [0]="arg1"
    [1]="arg2"
    [2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)

要求的变更:

$ echo "arg1 arg2 arg3" | ./string2array
args=(
    [0]="arg1"
    [1]="arg2"
    [2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)

问题:

正如Bash和Double-Quotes所指出的那样,传递给argv的文字引号不会像预期的那样被解析.

此工作台脚本可用于测试各种解决方案,它处理传输并制定可测量的响应.建议您专注于使用字符串作为参数获取的解决方案脚本,并且应该将$ args变量填充为数组.

string2array工作台脚本:

#!/usr/bin/env bash
#string2arry

args=()

function inspect() {
  local inspct=$(declare -p args)
  inspct=${inspct//\[/\\n\\t[}; inspct=${inspct//\'/}; inspct="${inspct:0:-1}\n)"
  echo -e ${inspct#*-a }
}

while read -r; do
  # source the solution to turn $REPLY in $args array
  source $1 "${REPLY}" …
Run Code Online (Sandbox Code Playgroud)

arrays string bash arguments argument-passing

7
推荐指数
1
解决办法
2509
查看次数

是否将参数传递给始终在java中从左到右排序的方法?

我将调用一个带有两个参数的方法,但我会像这样使用k ++:

polygon.addPoint((int)rs.getDouble( k++),(int)rs.getDouble( k++ ));
Run Code Online (Sandbox Code Playgroud)

其实我想确保jvm先执行第一个参数,然后再执行第二个参数.如果订单以某种方式改变,参数将被传递错误的顺序.

非常感谢!

java methods argument-passing order-of-execution

7
推荐指数
2
解决办法
988
查看次数

R函数中的默认参数(形式参数由多个实际参数匹配)

简单的问题,我希望.我想编写一个绘图函数,如果用户没有指定,则该函数具有y轴标签的默认值.我还想允许...其他绘图参数的参数,并允许用户ylab手动设置.但我无法弄清楚如何做到这一点.

# simple scatterplot function with a default ylab
scatter <- function(x,y, ...) {
    plot(x, y, ylab="Default y-axis label", ...)
}

# generate data
x <- rnorm(100)
y <- x+rnorm(100)

# use the default
scatter(x,y)

# here I want to use my own label, but I get an error!
scatter(x, y, ylab="New y-axis label")
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Error in plot.default(x, y, ylab = "Default y-axis label", ...) : 
  formal argument "ylab" matched by multiple actual arguments 
Run Code Online (Sandbox Code Playgroud)

我理解这个问题,但我不知道修复它的最佳方法.谢谢您的帮助!

编辑: …

r function argument-passing

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