据我所知,结合主流语言中的他人知识
有闭包和匿名功能.普通的C/C++没有这些.
这些语言中的闭包具有相同的语义吗?它们对日常编程有多重要?
一些背景:我一直在阅读针对Apple的Grand Central Dispatch的Objective C 的新增内容,并且我认为我应该了解是否真的只有一种或者不同的方式将类似块的结构引入该语言.
lambda closures functional-programming anonymous-function grand-central-dispatch
是否有可能获得PHP中匿名函数所需的参数数量?我知道ReflectionMethod,但这似乎只有在类上定义方法时才有效.在我的例子中,匿名函数要么有1个或两个参数.我更喜欢正确地进行检查,而不是将第一个调用包装在try/catch中,如果第一个调用失败则再次尝试使用2个参数.
在jQuery lambda函数中,用户询问在JQuery中调试lambda表达式.我搜索了很多网站,我无法在JQuery中找到lambda表达式的例子.有谁知道这是否可能,如果有,我在哪里可以找到一些例子?
我知道有很多委托/功能示例,但我找不到任何适合我的例子,或者我只是不理解它们.
我正在使用asp.net MVC作为一个网站,该网站需要一些Web服务调用,以便外部应用程序与我的应用程序进行交互.这些都需要一个函数来执行(转到db和whatnot),并且每次都返回一个类似的数据模型.我想在try/catch中包装每个调用并填充模型.
这是每次调用时发生的通用代码.
var model = new ResponseDataModel();
try
{
//execute different code here
}
catch (Exception ex)
{
model.Error = true;
model.Message = ex.ToString();
}
return View(model); // will return JSON or XML depending on what the caller specifies
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的控制器方法/功能之一
public ActionResult MillRequestCoil()
{
var model = new ResponseDataModel();
try
{
/* edit */
//specific code
string coilId = "CC12345";
//additional code
model.Data = dataRepository.doSomethingToCoil(coilId);
//replaced code
//model.Data = new { Coil = coilId, M3 = "m3 message", …Run Code Online (Sandbox Code Playgroud) 我有一个Haskell基础知识的问题:折叠+匿名函数
我正在开发一个bin2dec程序foldl.
解决方案如下所示:
bin2dec :: String -> Int
bin2dec = foldl (\x y -> if y=='1' then x*2 + 1 else x*2) 0
Run Code Online (Sandbox Code Playgroud)
我理解foldl/ 的基本思想,foldr但我无法理解参数的含义x y.
我正在向一个数组添加一个匿名函数,并尝试迭代执行其内容的数组.即使有一个简单的测试用例,我得到一个TypeError:不是一个函数.
我错过了一些简单的事吗?
//an array of functions
var signInFunctions = [];
//add a function to the array
signInFunctions.push(function() {
console.log("hello world");
});
function userSignedIn() {
//execute all functions in the signInFunctions array
for (var i = 0; i < signInFunctions.length; i++) {
signInFunctions(i);
}
}
userSignedIn();
Run Code Online (Sandbox Code Playgroud)
这是错误:
TypeError: 'function () {
console.log("hello world");
}' is not a function (evaluating 'signInFunctions(i)')
Run Code Online (Sandbox Code Playgroud) 假设您的表单上有一个按钮.您将一个匿名函数附加到按钮的Click事件:
void Test()
{
int x = 10;
btn.Click += (sender, e) => { MessageBox.Show(x.ToString()); };
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作并显示10; 意味着它可以访问局部变量.我的问题是如何以及为什么?匿名函数如何访问本地上下文?
我正在处理的实际问题是我需要将这个匿名函数升级(可以这么说)到常规函数(事件处理程序).但这样做意味着我将失去对变量x的访问权限.我也不能将它作为参数传递,因为那样我就无法将它附加到Click事件(签名不匹配).我可以通过创建全局变量和所有这些来解决这个问题,但是匿名函数如何能够访问超出其范围的事物?
我有以下代码创建一个匿名类型的实例,该方法作为唯一成员:
var test = new {
f = new Func<int, int>(x => x)
};
Run Code Online (Sandbox Code Playgroud)
我想实现一个函数,它总结了所有参数,无论传递了多少参数.这是常规方法的样子:
int Sum(params int[] values) {
int res = 0;
foreach(var i in values) res += i;
return res;
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道这是否适用于匿名方法.我试过了Func<params int[], int>,但显然不会编译.有没有办法用变量参数列表编写匿名方法,或者至少使用可选的args?
编辑:我想要实现的是调用这样的(匿名)求和方法:test.Sum(1, 2, 3, 4).
我在scala中发现了几种匿名函数语法:
val m5_1 = { (n: Int) => n * 5 }
val m5_2 = (n: Int) => { n * 5 } : Int
val m5_3: Int => Int = n => { n * 5 }
Run Code Online (Sandbox Code Playgroud)
是否存在所有类型或更多语法类型?
它们都相同吗?
哪一个更受/更不受欢迎?
如何指定返回类型m5_1?
c# ×3
lambda ×3
javascript ×2
.net ×1
arguments ×1
asp.net ×1
c++ ×1
closures ×1
compilation ×1
delegates ×1
fold ×1
haskell ×1
jquery ×1
params ×1
php ×1
reflection ×1
scala ×1
scope ×1
visual-c++ ×1