标签: anonymous-function

为什么无法在 PHP 的匿名函数中访问父/外部作用域的变量?

这是我的匿名函数:

<td><?=call_user_func(function($x) { if ($x == 1) { echo $produto->retornaMedida($dadosProdutos[$t]->medida_id); } else if ($x == 2) { echo "N/A"; } }, $dadosProdutos[$t]->produto_id)?></td>
Run Code Online (Sandbox Code Playgroud)

如果我不在条件范围内使用“超出范围”的内容,它会很好地工作,如下所示:

<td><?=call_user_func(function($x) { if ($x == 1) { echo "Whatever"; } else if ($x == 2) { echo "N/A"; } }, $dadosProdutos[$t]->produto_id)?></td>
Run Code Online (Sandbox Code Playgroud)

但是,$dadosProdutos例如,当我使用 时,我得到:

[24-Dec-2015 03:47:58 America/Sao_Paulo] PHP Notice:  Undefined variable: dadosProdutos in G:\Insanity\Web\xampp\htdocs\sisconbr-old\site\modulos\pedido\minhas-cotacoes.php on line 269
Run Code Online (Sandbox Code Playgroud)

当在匿名函数之外使用时, $dadosProdutos 不是“未定义”:

<td><?=$produto->retornaMedida($dadosProdutos[$t]->medida_id)?></td>
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我将外部变量作为参数传递给匿名函数时,我没有任何问题。我认为这就是他们在 C++ 的 lambda 上“捕获超出范围的变量”的意思

php function anonymous-function

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

如何在不使用create_function的情况下重写示例?

在查看PHP的create_function时,它说:

如果您使用的是PHP 5.3.0或更高版本,则应使用本机匿名函数

我想重新创建与create_function使用相同的功能anonymous function。我看不到方法或正确方法。

本质上,如何更改以下内容,以便不再使用create_function但仍可以输入要使用自己的参数求值的自由格式公式?

$newfunc = create_function(
    '$a,$b',
    'return "ln($a) + ln($b) = " . log($a * $b);'
);
echo $newfunc(2, M_E) . "\n";
Run Code Online (Sandbox Code Playgroud)

示例取自PHP create_function页面。

注意:

看起来与上面的示例一样,我可以传入任意字符串,并为我编译它。我可以不使用来以某种方式做到这一点create_function吗?

php anonymous-function create-function

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

Scala匿名函数中的模式匹配

我是一名初级 Scala 开发人员,在 Paul Chiusano 所著的“Scala 中的函数式编程”一书中进行的编码练习 (5.12) 中遇到了问题。

我在这里有这个函数,称为expand,它需要一个初始状态和一个函数,用于生成具有下一个状态的流:

def unfold[A,S](z: S)(f: S => Option[(A,S)]): Stream[A] = f(z) match {
  case Some((h,t)) => h #:: unfold(t)(f)
  case _ => Stream.empty
} 
Run Code Online (Sandbox Code Playgroud)

例如,使用这个函数可以创建一个无限的对象流,例如

def constant[A](a: A): Stream[A] = unfold(a)(_ => Some(a,a))

现在,我想创建斐波那契数列,然后输入:

def fibs: Stream[Int] = unfold((0,1))((a,b) => Some(a,(b,a+b)))

我收到这些错误:

  • 缺少参数类型 b

  • Some[((Int,Int),(Nothing,String))] 类型的表达式不符合预期类型 Option[(A_,(Int,Int))]

如果我在传递给expand的匿名函数中使用case关键字,例如:

{ case (a,b) => Some(a,(b,a+b))}

一切安好。

所以我的问题是:这两种实现有什么区别?这是我不明白的类型推断吗?

functional-programming scala type-inference anonymous-function pattern-matching

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

为什么应该将函数分配给变量?

在阅读php.net 上的匿名函数条目并查看提供的示例时,我遇到了本节,其中提到了这些函数的第二个用例:

闭包也可以用作变量的值。

我想知道为什么应该将方法分配给变量?我在这里试图了解这种方法的优点是什么:

$greet = function($name)
{
    echo "Hello $name";
};

$greet('World');
$greet('PHP');
Run Code Online (Sandbox Code Playgroud)

像这样的一块:

function greet($name) 
{
    echo "Hello $name";
}
greet('World');
greet('PHP');
Run Code Online (Sandbox Code Playgroud)

这有道理吗?这只是编写一段代码的另一种方式吗?或者,在某些情况下,在更高级的设计中,它将为更具描述性的代码库构建空间?

php anonymous-function

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

在scale_y_continuous中使用匿名函数

我可以使用 调用scale_y_continuous() 中的匿名函数function(y) comma(y),但无法使用 ~ 约定调用匿名函数。这种情况下可以用~吗?

library(scales)
library(ggplot2)

mtcars$model <- rownames(mtcars)

# Success
ggplot(mtcars[1:3,], aes(x = model, y = wt*2000)) + 
  geom_col() + 
  scale_y_continuous(labels = function(y) comma(y))

# Fail
ggplot(mtcars[1:3,], aes(x = model, y = wt*2000)) + 
  geom_col() + 
  scale_y_continuous(labels = ~comma(y))
Run Code Online (Sandbox Code Playgroud)

r anonymous-function ggplot2

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

匿名函数中的参数

我一直在练习匿名函数并得到以下结果:

takeWhile' :: (a -> Bool) -> [a] -> [a]
takeWhile' f xs = foldl (\x y z -> if (f x) && z then x : y else y) xs [] True
Run Code Online (Sandbox Code Playgroud)

这基本上是对 Haskell 中已有的 takeWhile 函数的重写。

对于那些不知道的人,takeWhile 函数接受一个列表和一个函数,并返回一个新列表,其中包含原始列表中满足该函数的每个元素,直到其中一个返回 false。

从我的角度来看,一切似乎都是正确的,我有 3 个参数 xy 和 z 准备在我的匿名函数中使用,x 是数字列表,y 是我将插入每个元素的空列表,z 基本上是一个debouncer 以便如果其中一个元素不符合要求,我们就不再插入。

然而 Haskell 给了我以下错误:

"Occurs check: cannot construct the infinite type: a ~ Bool -> [a]"
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

lambda haskell anonymous-function

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

泛型函数不能以匿名形式定义吗?

例如:

func f[T any](t T) T {
    var result T
    return result
}

// this got error !
var fAnonymous = func[T any](t T) T {
    var result T
    return result
}
Run Code Online (Sandbox Code Playgroud)

fAnonymous出现错误,它说:

函数文字不能有类型参数

那么,为什么 golang 不允许匿名函数是通用的呢?

generics anonymous-function go

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

C#匿名函数范围

var foo = "bar";

new Func<String>(() => 
{
    var foo = ""; // This can't be done in C#. Why is that?

    /* In JavaScript, this is perfectly valid, since this scope (the anonymous
       function) is disconnected from the outer scope, and any variable declared
       within this scope will not affect variables in the outer scope */

})()
Run Code Online (Sandbox Code Playgroud)

c# lambda anonymous-function

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

这种未知的JavaScript语法是什么?

这是jQuery代码吗?

(function(jQuery){
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

相当于

$(document).ready(function () {
});
Run Code Online (Sandbox Code Playgroud)

如果是,两者之间有什么区别?如果没有,第一个做什么?

编辑:

谢谢大家.大多数反应与不同的口味和样品相似

javascript jquery anonymous-function iife

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

Firefox 7中的Javascript匿名函数

更新到Firefox 7后,我收到以下错误:

函数语句需要一个名称

这个特定的功能定义为

fun = eval("function (item) { //Function body }");
Run Code Online (Sandbox Code Playgroud)

如果我把它重写为:

fun = eval("function view(item) { //Function body }");
Run Code Online (Sandbox Code Playgroud)

错误不再显示,但程序仍然无法正常工作.

Ps.-我知道评估一个字符串不是一个好主意.这是我必须修复的遗留应用程序,其中一些函数作为字符串按需从数据库下载.

javascript firefox anonymous-function

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