标签: anonymous-function

循环中的函数(返回另一个函数)如何工作?

我一直在尝试为JavaScript中的动态创建的"a"标记的onclick事件分配一个函数.所有标记都在循环中创建,如下所示:

for ( var i = 0; i < 4; i++ )
{
  var a = document.createElement( "a" );
  a.onclick = function( ) { alert( i ) };
  document.getElementById( "foo" ).appendChild( a );
}
Run Code Online (Sandbox Code Playgroud)

所有四个链接的警报值始终为"4".很明显.谷歌搜索时,我遇到了一个显示以下代码片段的帖子:

a.onclick = (function(p, d) {
return function(){ show_photo(p, d) }
})(path, description);
Run Code Online (Sandbox Code Playgroud)

我设法根据我的需要调整它并获得警报(i)正常工作的事情,但如果有人能够准确解释上述代码的作用,我将不胜感激.

javascript closures loops anonymous-function javascript-events

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

如何在C#中调用匿名函数?

我感兴趣的是,如果可以使用C#编写类似于这个Javascript的代码:

var v = (function()
{
    return "some value";
})()
Run Code Online (Sandbox Code Playgroud)

我能做的最多是:

Func<string> vf = () =>
{
    return "some value";
};

var v = vf();
Run Code Online (Sandbox Code Playgroud)

但是我想要这样的东西:

// Gives error CS0149: Method name expected
var v = (() =>
{
    return "some value";
})();
Run Code Online (Sandbox Code Playgroud)

有没有办法调用函数让它匿名?

c# anonymous-function

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

匿名函数与正常函数

只是出于兴趣,它们之间是否有任何速度/功能差异

function foo(bar) {
    alert("foo" + bar);
}
Run Code Online (Sandbox Code Playgroud)

var foo = function(bar) {
    alert("foo" + bar);
};
Run Code Online (Sandbox Code Playgroud)

javascript function anonymous-function

21
推荐指数
1
解决办法
9972
查看次数

匿名函数在clojure中期望有多少个参数?

Clojure如何确定匿名函数(使用#...符号创建)期望的参数数量?

user=> (#(identity [2]) 14)
java.lang.IllegalArgumentException: Wrong number of args (1) passed to: user$eval3745$fn (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)

arguments clojure anonymous-function

20
推荐指数
3
解决办法
6106
查看次数

从匿名函数postgresql返回值

如何?

举个简单的例子.我有一个简单的功能:

DO LANGUAGE plpgsql $$ DECLARE
BEGIN
EXECUTE 'SELECT NOW()';
END $$;
Run Code Online (Sandbox Code Playgroud)

我如何从匿名函数返回"NOW()"或其他值的值?该函数作为一个例子我有一个更复杂的功能.

postgresql anonymous-function plpgsql

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

匿名函数被认为有害吗?

我越深入研究javascript,就越会考虑某些设计决策和鼓励实践的后果.在这种情况下,我正在观察匿名函数,这个函数不仅是JavaScript提供的,而且我看到强烈使用.

我想大家都同意以下事实:

  • 人类的头脑不会超过7加减2个实体(米勒定律)
  • 深度缩进被认为是糟糕的编程习惯,如果缩进超过三个或四个级别,通常会指出设计问题.这扩展到嵌套实体,并且它在python Zen条目"Flat is than than nest"中得到了很好的体现.
  • 具有函数名称的想法既可供参考,也可轻松记录其执行的任务.我们知道或者可以预期一个名为removeListEntry()的函数.自我记录,清晰的代码对于调试和可读性非常重要.

虽然匿名函数似乎是一个非常好的功能,但它的使用导致深度嵌套的代码设计.代码编写速度快,但难以阅读.它不是被迫为一个功能发明一个命名的上下文,而是压缩你的可调用对象的层次结构,而是鼓励"深入一层",推动你的大脑堆叠,并迅速溢出7 +/- 2规则.艾伦·库珀(Alan Cooper)的" 关于面子 "(About Face)表达了类似的概念,引用了"人们不了解等级制度".作为程序员,我们确实理解了层次结构,但是我们的生物学仍然限制了我们对深层嵌套的掌握.

我想在这一点上听到你的意见.如果匿名功能被认为是有害的,我们后来发现的一种明显闪亮的语法糖是盐,甚至是鼠毒?

CW因为没有正确答案.

javascript language-design anonymous-function

19
推荐指数
2
解决办法
3226
查看次数

你能用Func <T>类型命名参数吗?

我有一个"调度图"定义如下:

private Dictionary<string, Func<DynamicEntity, DynamicEntity, IEnumerable<DynamicEntity>, string>> _messageProcessing;
Run Code Online (Sandbox Code Playgroud)

这允许我根据DynamicEntity实例的名称轻松地分派到不同的方法.

为了避免被更多地维护代码的每个人所厌恶,有没有办法在Func中命名参数以给出哪些DynamicEntity是哪个?

c# anonymous-function

19
推荐指数
3
解决办法
7247
查看次数

如何在匿名fn中进行递归,没有尾递归

如何在不使用尾递归的情况下在匿名函数中进行递归?

例如(来自Vanderhart 2010,第38页):

(defn power
  [number exponent]
  (if (zero? exponent)
    1
    (* number (power number (- exponent 1)))))
Run Code Online (Sandbox Code Playgroud)

假设我想将其作为匿名函数执行此操作.由于某种原因,我不想使用尾递归.我该怎么办?例如:

( (fn [number exponent] ......))))) 5 3)
125
Run Code Online (Sandbox Code Playgroud)

我可以使用循环这一点,也可以仅环搭配使用易复发

lisp functional-programming tail-recursion clojure anonymous-function

19
推荐指数
2
解决办法
6558
查看次数

自我调用匿名函数

在JavaScript中,看到自调用函数并不罕见:

var i = (function(x) {
    return x;
})(42);

// i == 42
Run Code Online (Sandbox Code Playgroud)

虽然我当然没有比较这些语言,但我认为这样的构造可以翻译成C#,只要提供支持的语言版本:

var i = (delegate(int x) {
    return x;
})(42);
Run Code Online (Sandbox Code Playgroud)

要么:

var i = ((x) => {
    return x;
})(42);
Run Code Online (Sandbox Code Playgroud)

甚至:

var i = (x => x)(42);
Run Code Online (Sandbox Code Playgroud)

但是,每个版本都有错误:

预期的方法名称

自调用匿名方法是否不受支持(由于显式禁止或类型推断不可能),或者我的尝试中是否存在错误?

我冒昧地猜测,因为没有方法声明(Func<T,T>)可以推断出类型,它无法理清隐含的类型,我打算通过名称调用声明的方法,并且真正搞砸了语法.


勘误表

在此问题充斥之前:

var i = new Func<int, int>(x => x)(42);
Run Code Online (Sandbox Code Playgroud)

我应该说我希望利用类型推断,但我认为由于过于隐蔽而可能无​​法实现.

所以,澄清一下这个问题; 我们知道我们可以var i = new Func<int, int>(x => x)(42);但是如果没有创建实例,或者转换为Func,这可能吗?

用例

对于那些好奇(或有关)的用例是这样的:

var o …
Run Code Online (Sandbox Code Playgroud)

c# anonymous-methods anonymous-function self-invoking-function

19
推荐指数
2
解决办法
6265
查看次数

如何从匿名表达式中获取值?

为简单起见,请想象以下代码:

我想创建一个Foo:

public class Foo
{
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并将其传递给特殊的Html Helper方法:

Html.SomeFunction(f => f.Bar);
Run Code Online (Sandbox Code Playgroud)

其定义为:

public string SomeFunction<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
Run Code Online (Sandbox Code Playgroud)

我想在这个函数中得到Bar的值,但是完全不知道如何得到它.

c# asp.net-mvc lambda anonymous-function

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