我继续为F#引用的表达式打印机,它不一定是完美的,但我想看看有什么可能.该有源图案中Microsoft.FSharp.Quotations.Patterns和Microsoft.FSharp.Quotations.DerivedPatterns用于分解引述表达式将通常提供MemberInfo在适当的时候情况下,这些可以被用来获得一个属性,功能等和它们的"声明"类型的名称,诸如模块或静态类.问题是,我只知道如何CompiledName从这些实例中获取,但我喜欢F#名称.例如,
> <@ List.mapi (fun i j -> i+j) [1;2;3] @> |> (function Call(_,mi,_) -> mi.DeclaringType.Name, mi.Name);;
val it : string * string = ("ListModule", "MapIndexed")
Run Code Online (Sandbox Code Playgroud)
如何重写这个匹配才能返回("List", "mapi")?可能吗?
仅供参考,这是Stringer Bell和pblasucci帮助的最终解决方案:
let moduleSourceName (declaringType:Type) =
FSharpEntity.FromType(declaringType).DisplayName
let methodSourceName (mi:MemberInfo) =
mi.GetCustomAttributes(true)
|> Array.tryPick
(function
| :? CompilationSourceNameAttribute as csna -> Some(csna)
| _ -> None)
|> (function | Some(csna) -> csna.SourceName | None -> mi.Name)
//usage:
let sourceNames =
<@ List.mapi …Run Code Online (Sandbox Code Playgroud) 我们目前手上有一点情况 - 似乎有人忘了在代码中关闭连接.结果是连接池相对快速耗尽.作为一个临时补丁,我们添加Max Pool Size = 500;到Web服务上的连接字符串,并在所有连接都用完后再循环池,直到我们弄明白这一点.
到目前为止,我们已经做到了:
SELECT SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID('MyDb') and last_batch < DATEADD(MINUTE, -15, GETDATE())
Run Code Online (Sandbox Code Playgroud)
获得15分钟未使用的SPID.我们现在尝试使用该SPID获取上次执行的查询:
DBCC INPUTBUFFER(61)
Run Code Online (Sandbox Code Playgroud)
但显示的查询是多种多样的,这意味着关于连接操作的基础级别的某些内容被破坏,或者我们的推断是错误的......
我们的想法在这里有误吗?DBCC/sysprocesses是否给出了我们期望的结果,或者是否存在一些副作用?(例如,池中的连接影响?)
(请注意我们可以使用SQL找到的东西,因为执行代码的人很多而且现在不在场)
"如果你拥有的唯一工具是锤子,那就很诱人,把所有东西看作是钉子." - 亚伯拉罕·马斯洛
我需要编写一个工具来将大型分层(SQL)数据库转储到XML.该层次结构由一个的Person与子公司表Address,Phone等表.
我必须转储数千行,所以我想逐步这样做,而不是将整个XML文件保存在内存中.
我想将非纯函数代码隔离到应用程序的一小部分.
我认为这可能是在Clojure中探索FP和并发性的好机会.我还可以向持怀疑态度的同事展示不可变数据和多核利用的好处.
我不确定应用程序的整体架构应该如何.我想我可以使用一个不纯的函数来检索数据库行并返回一个惰性序列,然后可以由返回XML片段的纯函数处理.
对于每一Person行,我可以创建一个Future并且有几个并行处理(输出顺序无关紧要).
当每个Person被处理时,任务将从检索适当的行Address,Phone等等表和生成嵌套XML.
我可以使用通用函数来处理大多数表,依靠数据库元数据来获取列信息,并为需要自定义处理的少数表提供特殊功能.这些功能可以列在一个map(table name -> function).
我是否以正确的方式解决这个问题?我可以轻松地使用Java在OO中执行此操作,但这并不好玩.
顺便说一句,有没有关于FP模式或架构的好书?我有几本关于Clojure,Scala和F#的好书,虽然每个都很好地涵盖了语言,但没有人看过功能编程设计的"大图".
Uri uri = new Uri(redirectionUrl);
NameValueCollection col = HttpUtility.ParseQueryString(uri.Query)
Run Code Online (Sandbox Code Playgroud)
uri.Query已被解码 - 所以我有什么方法可以阻止ParseQueryString它再次解码?
除此之外 - 是否有另一种方法从Uri检索名称值集合而不修改任何组件?
运行此脚本时,我收到一条错误消息,即document.GetElementById不是函数?- 您可以在以下网址查看该网站:http://www.fritidsjobbere.dk:
//Show random div with Javascript
antal = 6;
var randomnumber=Math.floor(Math.random()*antal);
if(randomnumber == "0") {
randomnumber = 1;
}
//alert(randomnumber);
document.getElementsById("partner-ad"+randomnumber).style.display = 'block';
Run Code Online (Sandbox Code Playgroud) 我正在使用JQuery UI自动完成.我指定最小长度.如果我指定minLength:2我需要在服务触发前键入2个字符.如果我指定minLength:1那么我只需要在源服务触发之前键入一个字符.
但是,当我指定时,minLength:0我仍然需要输入一个字符.那么重点是0什么?它有什么不同1?预期的和期望的行为将在输入具有焦点时立即触发......?
想法?
更新:在大多数情况下,karim的解决方案可以正常工作,但是当点击输入时会出现选项,当单击一个时,源会重新提交空字符串而不是刚刚选中的新选项,因此自动完成选项选择一个选项后,如果该框已空,则相同.
是否可以在Android中检测文件夹更改?我的意思是检测何时删除或更改文件并知道应用程序正在执行这些操作?在Windows中,您有系统事件,永久监视文件以检测更改是不必要的.了解哪个应用程序正在进行更改非常重要.