让我们看一下F#为简单函数生成的代码:
let map_add valueToAdd xs =
xs |> Seq.map (fun x -> x + valueToAdd)
Run Code Online (Sandbox Code Playgroud)
生成的lambda表达式代码(F#功能值的实例)如下所示:
[Serializable]
internal class map_add@3 : FSharpFunc<int, int> {
public int valueToAdd;
internal map_add@3(int valueToAdd) { this.valueToAdd = valueToAdd; }
public override int Invoke(int x) { return (x + this.valueToAdd); }
}
Run Code Online (Sandbox Code Playgroud)
看看几乎相同的C#代码:
using System.Collections.Generic;
using System.Linq;
static class Program {
static IEnumerable<int> SelectAdd(IEnumerable<int> source, int valueToAdd) {
return source.Select(x => x + valueToAdd);
}
}
Run Code Online (Sandbox Code Playgroud)
并为C#lambda表达式生成代码:
[CompilerGenerated]
private sealed class <>c__DisplayClass1 {
public int …Run Code Online (Sandbox Code Playgroud) 在我的母版页面上,我有一个方法Page_Load可以检查用户是否已登录,如果没有,则将其重定向到"登录"页面.
问题是,对于我的一些页面,Page_Load事件假设记录的用户都在,并且这些事件似乎在主页面中的登录检查之前触发,这会导致错误.
有什么方法可以解决这个问题?我可以在我的页面中使用除Page_Load之外的任何事件,这些事件会在母版页之后触发吗?
我最近收到了一篇关于JSLint的博客文章的评论,询问JSLint为什么会抛出以下错误:
s === "test" ? MyFunc() : MyFunc2();
Run Code Online (Sandbox Code Playgroud)
生成的错误是:
"期待一个任务或函数调用,而是看到一个表达式."
很明显,JSLint期待在这里进行任务,更像是:
var y = (s === "test") ? MyFunc() : MyFunc2();
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到第一个例子的问题.是否真的应该将三元运算符用于指派?
我在JSLint.com上看不到任何东西,在JavaScript:The Good Parts一书中也没有任何明显的东西.并且,社区fork JSHint中也报告了相同的错误.
任何人?
对我来说,jQuery最好但尚未充分利用的功能之一是自定义选择器.我有一个相当简单的例子,挑选出所有空文本框:
$(document).ready(function() {
$.extend($.expr[':'], {
textboxEmpty: function(el) {
var $el = $(el);
return ($el.val() == "") && ($el.attr("type") == "text");
}
});
});
Run Code Online (Sandbox Code Playgroud)
并致电:
alert($(":textboxEmpty").length);
Run Code Online (Sandbox Code Playgroud)
我真的想知道,如果有其他人有他们写的自定义选择器的一些有用的例子.
当然,我不会对这些陷阱视而不见,并且意识到它们可能非常慢,因此应该与其他更快的选择器结合使用.听听我们是否应该注意其他问题会很有用.
你能告诉我这种特定语法结构的原因吗?
eval('(' + jsonString+ ')')
Run Code Online (Sandbox Code Playgroud)
解析json文本时.克罗克福德说:" 文本必须用parens包装,以避免绊倒JavaScript语法中的歧义." 在这里.那是什么意思?
我们能避免吗?
据我所知,默认(对象)'对象'是任何引用类型总是返回null,但是我可以指定默认值是什么吗?例如,我想要default(object)== new object();
前一段时间我问了一个关于SQL Server中层次结构/版本号排序的问题.( 如何使用SQL Server查询对"版本号"列进行排序).
提交的答案中包含了与TSQL编码挑战相关的链接.
在SQL2000解决方案中,作者演示了两个变体,一个使用并返回varchar,另一个使用varbinary.作者解释说他没有解释为什么这样做.
那么,我的问题是,方法上的差异有哪些主要差异/优势(如果有的话)?即为什么使用varbinary而不是varchar?
我省略了发布代码,因为它在上面的文章中总结得最为优雅.
查看jQuery核心,我发现了以下代码约定:
nth: function(elem, i, match){
return match[3] - 0 === i;
},
Run Code Online (Sandbox Code Playgroud)
我对这个片段非常好奇 match[3] - 0
在Google上搜索"-0"并不是很有效率,搜索"减零"会返回对Bob Dylan歌曲的引用.
所以,谁能告诉我.这是某种性能技巧,还是有理由这样做而不是parseInt或parseFloat?
我想从一个表Log中选择所有记录,其中DateAndTime字段值(类型datetime)是今天的前一天,无论它是什么日子.
因此,如果今天是2011-06-08,我想选择DateAndTime大于或等于2011-06-07 00:00:00且小于的所有行2011-06-08 00:00:00.
我猜这里潜在的陷阱就是它在本月的第一天的行为,因为显然这样的日期2011-06-00是无效的,应该是2011-05-31.
鉴于以下示例代码克隆表行,设置一些属性,然后将其附加到表:
$("#FundTable").append(
objButton.parents("tr").clone()
.find(".RowTitle").text("Row " + nAddCount).end()
.find(".FundManagerSelect").attr("id", "FundManager" + nAddCount)
.change(function() { ChangeFundRow(); }).end()
.find(".FundNameSelect").attr("id", "FundName" + nAddCount).end()
);
Run Code Online (Sandbox Code Playgroud)
有没有人有任何关于如何将其格式化为更容易的建议?这样做是否有任何公认的惯例?
拥有一套可以遵循的规则并将其纳入一组标准将是有用的.