标签: dynamic-function

如何从存储在Variable中的字符串调用PHP函数

我需要能够调用一个函数,但函数名存储在一个变量中,这可能吗?例如:

function foo ()
{
  //code here
}

function bar ()
{
  //code here
}

$functionName = "foo";
// i need to call the function based on what is $functionName

任何帮助都会很棒.

谢谢!

php dynamic-function

271
推荐指数
10
解决办法
26万
查看次数

使用自定义名称创建Python动态函数

如果已经提出并回答了这个问题,请道歉.我需要做的是概念非常简单,但不幸的是我无法在网上找到答案.

我需要在运行时使用自定义名称在Python(Python2.7)中创建动态函数.每个函数的主体也需要在运行时构造,但对于所有函数(几乎)都是相同的.

我从一个名单开始.

func_names = ["func1", "func2", "func3"]
Run Code Online (Sandbox Code Playgroud)

请注意,func_name列表可以包含任意名称列表,因此名称不仅仅是func1,func2,func3,....

我希望结果如下:

    def func1(*args):
        ...

    def func2(*args):
        ...

    def func3(*args):
        ...
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是每个函数名称对应一个测试用例,然后从外部世界调用.

更新:没有用户输入.我正在绑一个更大的模块的两端.一端确定测试用例是什么,以及填充测试用例名称的列表.另一端是函数本身,它必须与测试用例的名称进行1:1映射.所以我有测试用例的名称,我知道我想对每个测试用例做什么,我只需要创建具有测试用例名称的函数.由于测试用例的名称是在运行时确定的,因此基于这些测试用例的函数创建也必须在运行时.

更新:我也可以将这个自定义命名函数包装在一个类中,如果这样可以使事情变得更容易.

我可以在字符串中硬编码函数的内容(因为它们几乎相同),或者我可以将它基于先前定义的基类.只需要知道如何用这个内容填充函数.

例如:

    func_content = """
                   for arg in args:
                       print arg
                   """
Run Code Online (Sandbox Code Playgroud)

提前致谢,

马赫迪

python closures metaprogramming dynamic-function python-2.7

41
推荐指数
4
解决办法
4万
查看次数

如何在SASS中定义动态混合或函数名称?

我想在SASS中动态创建mixins,以列表中的每个项目命名,但它似乎不起作用.

我试过这个,但是我收到一个错误:

$event-icons: fair, concert, art-show, conference, dance-show, film, party, festival, theatre, launch
@each $event-icon in $event-icons
  @mixin event-icon-#{$event-icon}
    background-position: -($event-icon-width * $i) 0
Run Code Online (Sandbox Code Playgroud)

错误:

Invalid CSS after "": expected expression (e.g. 1px, bold), was "#{$event-icon}"
Run Code Online (Sandbox Code Playgroud)

SASS不支持此用法吗?我在手册中找不到任何关于它的内容.

css sass mixins dynamic-function css-preprocessor

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

__callStatic(),call_user_func_array(),引用和PHP 5.3.1

我一直在阅读SO和其他地方,但我似乎无法找到任何结论.

有没有办法通过此调用堆栈有效地携带引用,从而产生所需的功能,如下面的示例所述?虽然该示例并未尝试解决此问题,但它确实说明了问题:

class TestClass{
    // surely __call would result similarly
    public static function __callStatic($function, $arguments){
        return call_user_func_array($function, $arguments);
    }
}

// note argument by reference
function testFunction(&$arg){
    $arg .= 'bar';
}

$test = 'foo';
TestClass::testFunction($test);

// expecting: 'foobar'
// getting:   'foo' and a warning about the reference
echo $test;
Run Code Online (Sandbox Code Playgroud)

为了激发潜在的解决方案,我将在此处添加摘要详细信息:

只关注call_user_func_array(),我们可以确定(至少在PHP 5.3.1中)你不能通过引用隐式传递参数:

function testFunction(&$arg){
    $arg .= 'bar';
}

$test = 'foo';
call_user_func_array('testFunction', array($test));
var_dump($test);
// string(3) "foo" and a warning about the non-reference parameter
Run Code Online (Sandbox Code Playgroud)

通过显式传递数组元素$test …

php pass-by-reference magic-methods dynamic-function

8
推荐指数
1
解决办法
5637
查看次数

Scala - 创建基本的动态函数解析器

我是Scala的新手,但我想知道可以在语言中实现一个简单的Equation解析器.

假设我有一些功能(很像Excel功能):

IF(Cond a=b, val_true, val_false)

MID(String, Start_pos, num_chars) - 字符串提取

LEN(String) - 字符串的长度

OR(cond1, cond2, ... condn)

AND(cond1, cond2, ... condn)

所以我的想法是,我可以在运行时传递一个公式作为来自用户的字符串作为命令行参数以及任何其他params说 IF(LEN(param1)=4,MID(param1,2,1), MID(param1,0,LEN(param1)))

这个想法是评估函数,所以如果用户提供上面的公式和字符串"scat",那么输出将是"a".如果给出字符串"scala",那么输出将是"scala"...

在Scala中实现这有多容易?什么是最好的设计方法?我知道没有函数指针(在CI中会将公式字符串解析为func点的集合并从那里消失)...

任何有关如何以高效Scala风格处理此问题的建议都将受到赞赏.

干杯!

functional-programming scala formula dynamic-function

8
推荐指数
1
解决办法
1364
查看次数

使用C++与程序集在运行时分配和创建新函数

我一直在研究一个(C++)项目,它需要完全动态分配的函数,这意味着malloc/new和mprotect,然后手动修改缓冲区到汇编代码.因此我完全想知道,我的这个"缓冲区"需要什么,因为它是任何其他_cdecl函数的复制品.例如:

int ImAcDeclFunc(int a, int b)
{
     return a + b;
}
Run Code Online (Sandbox Code Playgroud)

如果我想从字面上创建这个函数的副本,但是完全动态,那需要什么(并记住它是带有内联汇编的C++ )?对于初学者,我想我必须做这样的事情(或类似的解决方案):

// My main....
byte * ImAcDeclFunc = new byte[memory];
mprotect(Align(ImAcDeclFunc), pageSize, PROT_EXEC | PROT_READ | PROT_WRITE);
Run Code Online (Sandbox Code Playgroud)

在此之后我将不得不找出汇编代码ImAcDeclFunc(int a, int b);.现在我在组装时仍然很糟糕,那么这个函数将如何用于AT&T语法?这是我的大胆尝试:

push %ebp
movl %%ebp, %%esp
movl 8(%ebp), %%eax
movl 12(%ebp), %%edx
addl edx, eax
pop ebp
ret
Run Code Online (Sandbox Code Playgroud)

现在如果这段代码是正确的(我非常怀疑,请纠正我)我只需要在十六进制中找到这个代码的值(例如,'jmp'是0xE9而'inc'是0xFE),并直接使用这些值C++?如果我继续以前的C++代码:

*ImAcDeclFunc = 'hex value for push'; // This is 'push' from the first line
*(uint)(ImAcDeclFunc + 1) = 'address to …
Run Code Online (Sandbox Code Playgroud)

c++ gcc inline-assembly att dynamic-function

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

Php - 理解create_function() - 传递简单变量

我第一次尝试使用动态create_function,到目前为止,没有太大的成功:-)

我的功能是:

 function o99_brsa_custom_widgets() {
        global $wp_meta_boxes;
        global $o99_brsa_options;

        for($i=0; $i> count($o99_brsa_options[content]); $i++) {

            $widgt_id = 'o99_dashboard_widget_dyn' . $i;
            $widgt_name = 'obmek99 widget name' . $i;
            $out = $o99_brsa_options[content][$i];
            $f = create_function(' $out ',' global $out; echo $out;');
            do_the_widgets($widgt_id, $widgt_name, $f);
         }
    } 
Run Code Online (Sandbox Code Playgroud)

do_the_widgets()操作仅接受直接回显并打印窗口小部件的内容.

$o99_brsa_options[content]是一个带有$i元素的验证数组(每个都是内容).

奇怪的是,它$i正在工作$widgt_id,$widgt_name但是create_function()我得到了所有小部件中打印的相同值.(echo $out)

似乎我不知道如何将一个简单的变量传递给新函数(我在create_function()中使用全局,但它现在几乎没有帮助.

那么,现在我的错误/误解/误用是什么:-) ??

php lambda create-function dynamic-function

5
推荐指数
1
解决办法
1313
查看次数

Angular 2单击事件中的动态函数名称

虽然这个答案可能很简单,但我似乎陷入困境.作为Angular 2的初学者,我尝试了{},[]和()括号的所有可能组合来实现以下目的:

<button (click)="this.action">Click me</button>
Run Code Online (Sandbox Code Playgroud)

哪里:

this.action = "clickMe()"
Run Code Online (Sandbox Code Playgroud)

即它是一个字符串,该组件中应该在点击时执行的方法的名称.

有任何想法吗?

javascript components dynamic-function angular

5
推荐指数
1
解决办法
2544
查看次数

Python setattr()函数采用初始函数名称

我确实了解setattr()python的工作原理,但是我的问题是当我尝试动态设置属性并将其未绑定函数作为值提供时,因此该属性是可调用的,当我使用该属性时,该属性最终会使用未绑定函数的名称调用attr.__name__,而不是属性的名称。

这是一个例子:

我有一Filter堂课:

class Filter:
    def __init__(self, column=['poi_id', 'tp.event'], access=['con', 'don']):
        self.column = column
        self.access = access
        self.accessor_column = dict(zip(self.access, self.column))
        self.set_conditions()

    def condition(self, name):
        # i want to be able to get the name of the dynamically set 
        # function and check `self.accessor_column` for a value, but when
        # i do `setattr(self, 'accessor', self.condition)`, the function 
        # name is always set to `condition` rather than `accessor`
        return name

    def set_conditions(self):
        mapping = list(zip(self.column, …
Run Code Online (Sandbox Code Playgroud)

python class setattribute setattr dynamic-function

5
推荐指数
1
解决办法
89
查看次数

从另一个函数创建动态函数

我有一个Fortran 90子程序,它接受一个函数作为参数,我想将该函数的修改版本传递给另一个子程序.我希望程序看起来像这样:

subroutine foo(f, ...)
    real                 :: pt(2), dir(2)

    interface
    function f(x) result(y)
        real, intent(in) :: x(2)
        real             :: y
    end function f
    end interface

    pt = ...
    dir = ...
!! Somehow create g(x) = f(pt + x*dir)
    call bar(g)

end subroutine foo

subroutine bar(g)
    interface
    function g(x) result(y)
        real, intent(in) :: x
        real             :: y
    end function g
    end interface

!! Do stuff with g
end subroutine bar
Run Code Online (Sandbox Code Playgroud)

当'g'只需要使用普通变量而不是函数时,我已经设法做了类似的事情.在那种情况下,我使用全局变量将其作为全局函数,并将其分配给'foo'中的那些全局变量.但是,我找不到一种方法来将'f'变为全局,或将其分配给全局函数.

任何人有任何想法如何做到这一点?解决方案可以像你想要的那样hacky.

fortran function fortran90 dynamic-function

4
推荐指数
2
解决办法
1095
查看次数