标签: anonymous-function

使用带有 array_fill 的匿名函数

所以我的目标是创建一串随机字母,并且字母可以在字符串中重复。所以我想我可以聪明地这样做:

$str = implode(
  array_fill(0,10,
    function(){ 
      $c='abcdefghijklmnopqrstuvwxyz';
      return (string)$c{rand(0,strlen($c)-1)};
    }
  )
);
echo $str;
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

可捕获的致命错误:类 Closure 的对象无法转换为字符串...

这实际上是我的脚本中唯一的东西,所以不,它不是其他东西。现在,手册规定第三个参数描述array_fill是“用于填充的值”,并且它被列为接受混合类型。现在我知道“混合”不一定等于“任何”类型,但对我来说,我应该能够使用匿名函数作为第三个参数,只要它返回一个字符串,这似乎是合理的,对吗但显然我不能这样做..

所以,我不一定要问为什么我不能这样做;我只是问为什么我不能这样做。这很可能归结为当权者没有将其写入幕后的代码中。但我想我只是想仔细检查一下我是否“正确”执行了这段代码,因为如果 php 允许(但不允许),它“应该”工作,而不是也许我在其他地方搞砸了?

php anonymous-function

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

MATLAB 中的匿名函数损坏。“@sf%”是什么意思?

我被 MATLAB 中的分段错误难住了。它似乎是由从 mat 文件加载的匿名函数引起的。最初的匿名函数句柄是:

@(x)scaledNlfun(x,@logexp1,1e3) 
Run Code Online (Sandbox Code Playgroud)

但是当它加载时,它变成了:

@sf%1@(x)scaledNlfun(x,@logexp1,1e3)
Run Code Online (Sandbox Code Playgroud)

似乎没问题,当我在命令行中调用它时,但它会在函数中创建分段错误(或分段违规)。不是函数调用本身,而是之后的几行。在调试模式下,如果我单步执行语句,也没有问题。

堆栈跟踪显示一堆

[  0] 0x00002b20b97baba4 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04127652
Run Code Online (Sandbox Code Playgroud)

它发生在 Linux 2.6.18-371.3.1.el5 SMP 上的 MATLAB 2012a 和 2013a 上。

此函数句柄使用“-v7.3”选项保存在parfor循环中,因为包含句柄的结构太大。如果我在加载 mat 文件后替换匿名函数,一切正常,所以我认为 matlabload函数有一个错误。

不幸的是,我无法创建一个最小的示例来重现错误。我尝试使用“-v7.3”在 parfor 中保存匿名函数句柄,但没有其他复杂的数据结构,它似乎工作正常。但是我有 80 个 mat 文件,它们会可靠地使 matlab 崩溃(其中许多超过 1GB)。

无论如何,有人知道“@sf%”是什么意思吗?(这不是 stateflow 工具箱)

matlab anonymous-function

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

作为参数传递的函数总是回调吗?JavaScript

如果我有下面的代码,我将两个函数作为参数传递给 function sayHi,这是回调的示例吗?

我注意到有两种运行这些“参数函数”的方法:要么如下所示,我们在定义它们的地方调用函数(作为参数),要么在 sayHi 函数中调用参数。这是回调函数和匿名函数之间的区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue == true) {
        console.log(name);
    }
}

sayHi(function() {
    return 'Zach'
}(), function() {
    return true;
}());
Run Code Online (Sandbox Code Playgroud)

我可以获得相同结果的另一种方法如下。在这种情况下,我在不同的时间评估函数?两者之间有什么实际区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue() == true) {
        console.log(name());
    }
}

sayHi(function() {
    return 'Zach'
}, function() {
    return true;
});
Run Code Online (Sandbox Code Playgroud)

javascript callback anonymous-function

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

如何在 PHP 中将多个参数传递给匿名函数?

PHP 5.3+ 支持匿名函数(尽管在 PHP 7.x+ 中,它对匿名函数的支持在绑定方面略有不同)。我正在运行 PHP 5.6.x

是否有一种语法允许将多个参数传递给用作回调的匿名函数(而不是仅使用数组。以下哪些示例(如果有)可以在 PHP 中实现?

实施例1

function ($str1, $str2 ){   //But, that would be too easy, right?
    return $str1 . $str2;
}
Run Code Online (Sandbox Code Playgroud)

实施例2

function () use ($string, $min, $max) {  // Not seeing this in the manual.
    $length = mb_strlen($string, 'UTF-8');
    return ($length >= $min) && ($length <= $max);
}
Run Code Online (Sandbox Code Playgroud)

实施例3

只是出于好奇,这种形式可能吗?

function ($str1, $str2 ) use ($int1, $int2) { // But, that would be in the …
Run Code Online (Sandbox Code Playgroud)

php callback anonymous-function

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

从映射函数返回多个值

假设我有一个名为 trig 的函数,它返回两个输出:

function trig(x)
    return(sin(x), cos(x))
end
Run Code Online (Sandbox Code Playgroud)

如果我想评估多个值的三角函数,我可以使用 map 函数:

julia> out = map(trig, (0:(pi/12):(pi/2)))
Run Code Online (Sandbox Code Playgroud)

out 是一个 7 元素数组,每个元素中都有一个包含两个元素的元组:

julia> out
7-element Array{Tuple{Float64,Float64},1}:
(0.0,1.0)
(0.258819,0.965926)
(0.5,0.866025)
(0.707107,0.707107)
(0.866025,0.5)
(0.965926,0.258819)
(1.0,6.12323e-17)
Run Code Online (Sandbox Code Playgroud)

我的问题是:解开正弦和余弦的最佳方法是什么,以便我有两个数组,每个数组有 7 个元素?是否可以在不创建多余的元组数组的情况下广播三角函数,而是直接创建我真正感兴趣的两个数组?

目前,我再次调用 map 以便从 out 中提取值以填充我想要的数组,但我认为这不是执行此操作的最佳方法:

sines = map(x->x[1], out)
cosines = map(x->x[2], out)
Run Code Online (Sandbox Code Playgroud)

出于本问题的目的,假设 trig 是一个计算量大的函数。因此,请不要给我一个需要多次评估 trig 的答案。

arrays function anonymous-function julia

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

JavaScript 专家:带有“{}”的块作用域和匿名函数都有助于垃圾收集吗?

在《你不知道的 JS:作用域和闭包》一书中,Kyle simpson 指出块作用域变量有助于垃圾回收,具体示例如下:

function process(data) {
// do something interesting
}

{
let someReallyBigData = {};
process(someReallyBigData);
}

var btn = document.getElementById("my_button");
btn.addEventListener("click", function click(evt) {
console.log("Clicked!");    
}, false);
Run Code Online (Sandbox Code Playgroud)

现在上面的示例应该有助于垃圾收集,因为someReallyBigData一旦块结束,变量就会从内存中删除,与此示例不同,它对垃圾收集没有帮助:

function process(data) {
// do something interesting
}

var someReallyBigData = {};

process(someReallyBigData);

var btn = document.getElementById("my_button");
btn.addEventListener("click", function click(evt) {
console.log("Clicked!");    
}, false);
Run Code Online (Sandbox Code Playgroud)

现在我确信这个人对他提供的例子(第一个)是正确的;var但是,我想知道如果我们使用匿名 IIFE(立即调用函数表达式)以及普通的而不是{}花括号和变量,是否一切都会相同let。让我把它变成一个例子:

function process(data) {
// do something interesting
}

(function(){
var someReallyBigData = {};
process(someReallyBigData);
}()); …
Run Code Online (Sandbox Code Playgroud)

javascript v8 spidermonkey anonymous-function ecmascript-6

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

如何将匿名函数传递给 dplyr summarise

我有一个简单的数据框,包含 3 列:namegoalactual。因为这是更大数据帧的简化,所以我想使用 dplyr 来计算每个人实现目标的次数。

df <- data.frame(name = c(rep('Fred', 3), rep('Sally', 4)),
                 goal = c(4,6,5,7,3,8,5), actual=c(4,5,5,3,3,6,4))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

结果应该是这样的:

在此输入图像描述

我应该能够传递类似于下面所示的匿名函数,但语法不太正确:

library(dplyr)
g <- group_by(df, name)
summ <- summarise(g, met_goal = sum((function(x,y) {
                                       if(x>y){return(0)}
                                       else{return(1)}
                                     })(goal, actual)
                                    )
                  )
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我看到以下 3 个错误:

警告消息: 1:在 if (x == y) { 中:条件长度 > 1 并且仅使用第一个元素

r anonymous-function dplyr

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

在where子句中发送变量LINQ PHP

对于 PHP 中的 LINQ,我使用了https://github.com/Athari/YaLinqo

我不知道如何在where子句中传递变量。

public function filter($arr, $find) {
   Enumerable::from($arr)->where(function($val) { return stripos($val->item, $find) > -1; })->toArray();
}
Run Code Online (Sandbox Code Playgroud)

似乎没有像$find未定义那样工作,但我将它作为方法的参数发送。

php linq anonymous-function yalinqo

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

如何创建内联匿名函数,以便在函数调用中立即使用?

我有一个我创建的 Swift 函数,它接受一个函数作为参数:

func doMath(_ f:(_ i1 : Int, _ i2 : Int) -> 
          (), _ i1: Int, _ i2: Int) {
    print("doing Math")
    f(i1, i2)
}
Run Code Online (Sandbox Code Playgroud)

该函数采用两个参数(均为 Int)并且不返回任何内容。

我可以使用非匿名函数通过以下代码成功调用该方法。

func add(_ m1:Int, _ m2: Int){
    print (m1 + m2)
}

doMath(add, 3,5)
Run Code Online (Sandbox Code Playgroud)

当 doMath 被调用时,它会打印:

做数学

然后调用 add 函数,然后打印:

8

什么语法允许doMath使用匿名函数调用函数?

我试过的

  • 我正在阅读Matt Neuberg所著的iOS 12 Programming Fundamentals with Swift这本书,但他跳过了用参数解释匿名方法。
  • 我用谷歌搜索过,但找不到我能弄清楚的快速例子。
  • 我尝试了许多变体,以下是我最接近的,但出现如下所示的错误:

doMath(5,8, { 
   (m1:Int, m2:Int) -> ()  in  
   print(m1 * m2) 
 })
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出:

错误信息

parameters syntax anonymous-function swift

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

如何将挂起函数作为显式参数传递给协程构建器?

我正在研究将launch协程代码作为block: suspend CoroutineScope.() -> Unit. 我们通常将代码作为 lambda 传递。但是,我想知道如何将此函数作为显式参数传递给启动函数。

coroutineScope {
    launch(block = ::myFunction)
}

suspend fun CoroutineScope.myFunction(): Unit {
    // coroutine code
}
Run Code Online (Sandbox Code Playgroud)

它给出以下错误

Type mismatch.
Required:
suspend CoroutineScope.() ? Unit
Found:
KSuspendFunction0<Unit>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

anonymous-function kotlin kotlin-coroutines

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