我正在使用代码:
var x = function() {return true;};
Run Code Online (Sandbox Code Playgroud)
试图将x设置为true,该函数的返回值,而是x被定义为函数本身.如何将x设置为函数的返回值?我可以通过使用非内联函数或其他类似的东西轻松编码这个问题,但它让我感到困惑,因为我确信必须有一个简单的解决方案.
谢谢.
据我所知,Scala中没有办法在匿名函数中有多个返回点,即
someList.map((i) => {
if (i%2 == 0) return i // the early return allows me to avoid the else clause
doMoreStuffAndReturnSomething(i) // thing of this being a few more ifs and returns
})
Run Code Online (Sandbox Code Playgroud)
提出一个error: return outside method definition.(如果没有提出这个问题,那么代码将不起作用,因为我希望它可以工作.)
我可以做的一个解决方法是以下
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否还有另一种"接受"的做法.也许有可能没有内部功能的名称?
(一个用例是continue在循环中模拟一些有价值的构造.)
编辑
请相信我,有必要避免使用else语句,因为该doMoreStuff部分可能看起来像:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i) …Run Code Online (Sandbox Code Playgroud) Eclipse和NetBeans都会抛出有关使用匿名函数的错误.NetBeans中的错误说The language feature not compatible with PHP version indicated in project settings
代码可以工作,但IDE似乎不喜欢它.
我应该担心吗?
<script>
var sample = function() {
(function() {
return "something"
})();
// how can I return it here again?
}
</script>
Run Code Online (Sandbox Code Playgroud)
有没有办法再次从父函数中的匿名函数返回返回值,还是需要使用已定义的函数来获取返回值?谢谢!:)
简而言之:是否有一种优雅的方式来限制匿名函数的范围,或者在这个例子中是否有Matlab破坏?
我有一个函数创建一个在管网解算器中使用的函数句柄.它接受一个网络状态作为输入,其中包括有关管道及其连接的信息(如果必须,还包括边和顶点),构造一个大字符串,在函数形式时将返回一个大矩阵,并"evals"该字符串以创建句柄.
function [Jv,...] = getPipeEquations(Network)
... %// some stuff happens here
Jv_str = ['[listConnected(~endNodes,:)',...
' .* areaPipes(~endNodes,:);\n',...
anotherLongString,']'];
Jv_str = sprintf(Jv_str); %// This makes debugging the string easier
eval(['Jv = @(v,f,rho)', Jv_str, ';']);
Run Code Online (Sandbox Code Playgroud)
这个函数按预期工作,但每当我需要保存包含此函数句柄的后续数据结构时,它需要一个可笑的内存量(150MB) - 巧合的是在创建此函数时整个Matlab工作区(~~) 150MB).这个函数处理的变量需要来自getPipeEquations工作区并不是特别大,但是当我检查函数句柄时,更疯狂的是:
>> f = functions(Network.jacobianFun)
f =
function: [1x8323 char]
type: 'anonymous'
file: '...\pkg\+adv\+pipe\getPipeEquations.m'
workspace: {2x1 cell}
Run Code Online (Sandbox Code Playgroud)
...工作区字段包含getPipeEquations具有的所有内容(顺便说一句,它不是整个Matlab工作区).
如果我改为将eval语句移动到子函数以试图强制范围,则句柄将更加紧凑(~1MB):
function Jv = getJacobianHandle(Jv_str,listConnected,areaPipes,endNodes,D,L,g,dz)
eval(['Jv = @(v,f,rho)', Jv_str, ';']);
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?是否有更优雅的方式来限制此匿名函数的范围?
作为附录,当我多次运行包含此函数的模拟时,清除工作空间变得非常缓慢,这可能与Matlab处理函数及其工作空间有关,也可能与之无关.
在手册中有create_function函数,你可以将该函数的结果传递给array_map,我认为这是拥有像匿名函数和闭包这样的东西的唯一方法,但后来我发现我可以把函数放在javascript中
array_map(function($a) {
return $a + 1;
}, array(1, 2, 3, 4, 5));
Run Code Online (Sandbox Code Playgroud)
在哪个版本的PHP我可以做到这一点?这总是在那里吗?
如何使用匿名函数文字(#())在clojure中编写身份函数?
以下代码不起作用:
(#(%) 5)
Run Code Online (Sandbox Code Playgroud)
它引发了一个异常,因为它被转换为:
((fn[x] (x)) 5)
Run Code Online (Sandbox Code Playgroud)
问题在于,当使用#()时,函数体用括号括起来.任何想法,如何优雅地克服这个?
在PHP中使用匿名函数时,可以使用use()关键字轻松地使用其范围之外的变量.
在我的例子中,匿名函数已经在某处定义,但稍后在(在其他地方)类中调用.
以下代码是为了说明这个想法:
<?php
$bla = function ( $var1 ) use ($arg)
{
echo $var1;
};
class MyClass
{
private $func;
public function __construct ( $func )
{
$this->func = $func;
}
public function test ( $arg )
{
$closure = $this->func;
$closure ( 'anon func' );
}
}
$c = new MyClass($bla);
$c->test ( 'anon func' );
Run Code Online (Sandbox Code Playgroud)
我正在做的是我创建一个anonymous function并存储在变量中.我将该变量传递给类的方法,这是我想要运行匿名函数的地方.
但我不能使用use()关键字$arg从method这种方式获取参数.因为匿名函数是在...之外声明的method.
但我真的需要一种方法来从运行匿名函数的方法中获取变量.当匿名函数在其他地方声明时,有没有办法做到这一点?
当我在字符串中有函数体时,如何动态创建匿名函数.
例如
$user = "John Doe";
$body = "echo 'Hello' . $user;";
$myFunct = function($user) {$body}; // How do I have function body here from string.
$myFunct($user);
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
PS我正在寻找替代create_function()功能,这在PHP的早期版本中是有的.就像在create_function()中我们可以将函数体作为字符串传递一样,我想在字符串变量中定义匿名函数的主体.
通常,在Javascript中,当我想将匿名/内联函数作为参数传递给另一个函数时,请执行以下操作之一。
someFunctionCall(function() {
//...
});
someFunctionCall( () => {
//...
});
Run Code Online (Sandbox Code Playgroud)
但是,我最近继承了一个使用命名函数作为内联参数的代码库,如下所示
someFunctionCall(function foo() {
//...
});
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种语法。该函数似乎仍然是匿名的- foo在调用范围或被调用范围中都没有定义函数。这仅仅是样式问题,还是可以使用命名函数(foo上述)作为匿名函数来更改该程序的行为或状态?
这是专门针对NodeJS(不是基于浏览器的程序)程序的,并且我对使用函数作为参数的特定行为特别感兴趣。也就是说,欢迎跨平台和运行时提供来自行为的信息。
javascript closures anonymous-function node.js function-expression