标签: anonymous-function

Haskell Lambda函数 - 两个看似相同的函数,一个是有效的,另一个是错误的

这个Lambda函数返回1:

  (\x y -> 1) 1 p
Run Code Online (Sandbox Code Playgroud)

其中p =(\ xy - > 1)

好吧,这对我来说很有意义 - Lambda函数返回1,与其参数无关.

现在,这个Lambda函数生成一个错误(无限类型错误):

  (\x y -> x y x) p 1
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义.如果该函数应用于这里的参数是将p替换为x而将1替换为y的结果:

  p 1 p
Run Code Online (Sandbox Code Playgroud)

将第一个p替换为其定义:

  (\x y -> 1) 1 p
Run Code Online (Sandbox Code Playgroud)

嘿! 这与上面的相同,返回1.

问题:为什么(\ xy - > 1)1 p成功而(\ xy - > xyx)p 1失败?

/罗杰

lambda haskell anonymous-function

6
推荐指数
2
解决办法
553
查看次数

在MATLAB中是否有"自我"来引用自己的结构?

我将一组匿名函数分组到一个结构中,并将该结构中的一些变量分组.有没有办法引用"自我",即自己的结构?我想要完成的是让函数根据成员变量返回一些值.为简单起见,说我有struct 一个,在哪里

a.value_1 = 3;
a.value_2 = 2;
a.sum = @()(self.value_1 + self.value_2)
Run Code Online (Sandbox Code Playgroud)

在MATLAB中有类似的东西吗?

oop matlab struct this anonymous-function

6
推荐指数
1
解决办法
795
查看次数

为匿名内部类使用最终的1元素数组

我偶然发现了这个技巧,从匿名内部类中获取一个值,该变量在外部类中声明.它有效,但感觉就像一个肮脏的黑客:

private int showDialog()
{
    final int[] myValue = new int[1];

    JPanel panel = new JPanel();
    final JDialog dialog = new JDialog(mainWindow, "Hit the button", true);
    dialog.setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE );

    JButton button = new JButton("Hit me!");
    button.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            myValue[0] = 42;
            dialog.setVisible(false);
        }
    });

    panel.add(button);
    dialog.add(panel);
    dialog.pack();
    dialog.setVisible(true);

    return myValue[0];
}
Run Code Online (Sandbox Code Playgroud)

(是的,我意识到这个例子可以用一个简单的替换JOptionPane,但我的实际对话框要复杂得多.)内部函数坚持认为它与之交互的所有变量都是final,但我不能将其声明myValue为final,因为内部函数需要为其分配一个值.将它声明为1元素阵列解决了这个问题,但似乎它可能是某种坏事TM.我想知道是否a.)这是常见做法或b.)这可能导致任何严重问题.

java swing dialog final anonymous-function

6
推荐指数
1
解决办法
1760
查看次数

setTimeout()在自调用函数中的递归函数

我想将我的代码分发为一个自我唤起的匿名函数,正如我看到许多人所做的那样.此外,在我的代码中,我必须监视另一个lib加载,所以我可以在它可用时使用它.

(function(window, document, undefined) {
  staffHappens();
  var initMyLib = function() {
    if (typeof(myLib) == 'undefined') {
      setTimeout("initMyLib()", 50);
    } else {
      useMyLib();
    }
  }
  moreStaffHappens();
  initMyLib(); //-> initMyLib is undefined
})(this, document);
Run Code Online (Sandbox Code Playgroud)

这个错误怎么会发生?initMyLib应该在封闭(自我调用)函数的范围内吗?

javascript closures anonymous-function settimeout

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

我可以立即评估匿名函数吗?

可能重复:
立即执行匿名函数

我想立即评估一个匿名函数,而不是它在方法args中作为Closure对象出现.这可能吗?

例如:

$obj = MyClass;
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo()
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()?
Run Code Online (Sandbox Code Playgroud)

第3行是非法语法 - 有没有办法做到这一点?

谢谢

php lambda anonymous-function

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

匿名函数和普通函数之间的性能会有差异吗?

匿名函数和普通函数之间的性能会有差异吗?例如,函数调用的开销是否有任何变化?

感谢致敬!

matlab anonymous-function

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

表达式树深度限制

我正面临一个问题,试图在Expression <Func <MyType,bool >>类型的LambdaExpression上调用Compile(),其深度大约为400.较小的值不会导致任何问题.我找不到任何关于这种限制的事情.任何人都可以澄清这个吗?我可以增加这个限额吗?

upd:对不起,忘了提,我得到StackOverflowException:

System.Core.dll中出现未处理的"System.StackOverflowException"类型异常{无法计算表达式,因为当前线程处于堆栈溢出状态.}

c# delegates expression anonymous-function expression-trees

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

在5.3之前的PHP中使用"create_function"比较器进行排序?

我以前从未在PHP中使用过匿名函数,但是我发现了一段代码,它使用一个代码来排序对象

usort($numTurnsPerUser,build_sorter('turns'));

function build_sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}
Run Code Online (Sandbox Code Playgroud)

此代码将通过键对对象进行排序(我传入"turn").例如,一个看起来像这样的对象:(用JSON编写,只是为了便于阅读)

$numTurnsPerUser = {
    "31":{
        "turns":15,
        "order":0
    }, "36":{
        "turns":12, 
        "order":1
    }, "37":{
        "turns":14, 
        "order":2
    }
}
Run Code Online (Sandbox Code Playgroud)

将被分类为如下所示的对象:

$numTurnsPerUser = {
    "36":{
        "turns":12,
        "order":1
    }, "37":{
        "turns":14,
        "order":2
    }, "31":{
        "turns":15, 
        "order":0
    }
}
Run Code Online (Sandbox Code Playgroud)

这在我的运行PHP 5.3.0的本地服务器上运行良好,但它无法在我的在线服务器上运行,运行"php5" - 我无法找到除此之外的任何信息.我收到了一个错误

解析错误:语法错误,意外T_FUNCTION

我读到PHP <5.3不能使用匿名函数,必须使用create_function,但匿名函数的"use"部分让我难以理解.有人可以向我解释一下该功能的"使用"部分是什么,或者更好的是,我如何将其"翻译"到所需的create_function参数?

php sorting anonymous-function

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

如何在Erlang中使用闭包?

我有两个列表:L和E.我尝试编写一个函数,它返回另一个列表,其中包含L中元素的出现次数.

-module(mymodule).
-export([count/2]).
-export([numberOfOccurences/2]).

count([Head|Tail], Counter) ->
  fun(Element) -> if
    [Head|Tail] == [] -> Counter;
    Element == Head -> count(Tail, Counter + 1);
    Element /= Head -> count(Tail, Counter)
  end
end.

numberOfOccurences(L, E) -> 
    lists:map(count(L, 0), E).
Run Code Online (Sandbox Code Playgroud)

mymodule:numberOfOccurences[1,2,"abc",2,1,"abc",4,1,1], [1,2,3,"abc"])应该回来[4,2,0,2].但它返回一个包含4个函数的列表.我究竟做错了什么?

erlang closures functional-programming list anonymous-function

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

在Julia中使用匿名函数的性能损失

我注意到在Julia中使用匿名函数会导致性能下降.为了说明我有两个quicksort实现(取自Julia发行版中的微观性能基准).第一种按升序排序

function qsort!(a,lo,hi)
    i, j = lo, hi
    while i < hi
        pivot = a[(lo+hi)>>>1]
        while i <= j
            while a[i] < pivot; i += 1; end
            while pivot < a[j]; j -= 1; end
            if i <= j
                a[i], a[j] = a[j], a[i]
                i, j = i+1, j-1
            end
        end
        if lo < j; qsort!(a,lo,j); end
        lo, j = i, hi
    end
    return a
end
Run Code Online (Sandbox Code Playgroud)

第二个需要一个额外的参数:一个匿名函数,可用于指定升序或降序排序,或比较更奇特的类型

function qsort_generic!(a,lo,hi,op=(x,y)->x<y)
    i, j = lo, hi
    while i < hi
        pivot = …
Run Code Online (Sandbox Code Playgroud)

performance anonymous-function julia

5
推荐指数
3
解决办法
892
查看次数