所以我的目标是创建一串随机字母,并且字母可以在字符串中重复。所以我想我可以聪明地这样做:
$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 允许(但不允许),它“应该”工作,而不是也许我在其他地方搞砸了?
我被 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 工具箱)
如果我有下面的代码,我将两个函数作为参数传递给 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) 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) 假设我有一个名为 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 的答案。
在《你不知道的 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) 我有一个简单的数据框,包含 3 列:name、goal和actual。因为这是更大数据帧的简化,所以我想使用 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 并且仅使用第一个元素
对于 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未定义那样工作,但我将它作为方法的参数发送。
我有一个我创建的 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使用匿名函数调用函数?
我试过的
doMath(5,8, {
(m1:Int, m2:Int) -> () in
print(m1 * m2)
})
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出:
我正在研究将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)
我错过了什么?
php ×3
callback ×2
javascript ×2
arrays ×1
dplyr ×1
ecmascript-6 ×1
function ×1
julia ×1
kotlin ×1
linq ×1
matlab ×1
parameters ×1
r ×1
spidermonkey ×1
swift ×1
syntax ×1
v8 ×1
yalinqo ×1