似乎有一些关于log4net是否是线程安全的讨论,一致认为该框架是线程安全的,但是appender不是并且需要正确使用才能实现线程安全.有人可以对此发表一些看法并举例说明RollingFileAppender以线程安全的方式使用吗?它是否需要被推入上下文?以某种方式锁定,或者什么?
我知道如何使用可变对象在F#中序列化,但有没有办法使用XmlSerializer或DataContractSerializer使用记录类型序列化/反序列化?看起来有一种方法可以使用KnownType属性为一个有区别的联合做到这一点,但我正在寻找一种方法来使用没有默认构造函数的非可变记录...
我有这样的功能:
private def add[T](n: String, t: T, k: Map[String,T]): T = { k += (n -> t); t }
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说有一个val的重新分配,所以没有把它改成一个可变的地图,有没有办法像案例类那样说"var k:Map ..."?
谢谢!
当使用.net类时,有些情况下我们不需要括号来传递单个参数,例如
let foo = DirectoryInfo "boo"
Run Code Online (Sandbox Code Playgroud)
但是使用单个参数稍微复杂一些,我们确实需要括号...当这是真的时,是否有人知道解析规则?
是否可以设置visual studio,以便我可以在c#和f#项目之间进行定义?有谁知道有任何计划在视觉工作室中为f#做更好的整合?
在F#我可以声明自定义的异常,像这样:
exception Foo of string,
它将字符串映射到Message属性.
我如何声明一个我以后可以使用它来引发捕获的异常作为这个异常的内部异常?换句话说,我该怎么做(伪)
try
...
with e -> raise Foo (message, innerException) where innerException is e?
Run Code Online (Sandbox Code Playgroud)
谢谢!
如何使用类似于log4net的日志库为f#设置printf样式的记录器.我有Log.Debug,Info,Warn等功能,类似于log4net中的DebugFormat或InfoFormat.我试图为我的Log类设置类型扩展,我可以调用printf样式,如Log.Debugf"%s""foo".我的通用日志功能如下所示:
let log format = Printf.kprintf (sprintf "%s") format
Run Code Online (Sandbox Code Playgroud)
我有扩展功能签名的问题,以登录我的调试功能...我尝试使用Debugf格式和调试
这是我到目前为止:
type u = {str : string} //some type that has some property str (for simplicity, only one)
type du=
| A of u
| B of u // some discriminated union that carries u with it
Run Code Online (Sandbox Code Playgroud)
然后,在某个地方,我有一个du序列,我正在做distinctBy和属性做的不同是str.我能想出的最好的是:
Seq.distinctBy (fun d -> match d with (A u|B u) -> u.str)
Run Code Online (Sandbox Code Playgroud)
代码有效,但我不喜欢在受歧视的联盟的a和b上匹配,并希望用某些东西替换匹配.
问题是什么?:)
编辑:
在我的情况下,被区分的联合的a和b将总是带有相同的类型u,一个解决方案是摆脱du并添加它的字符串形式来输入u并简化整个混乱,但我想保留它现在的方式,因为我打算在a和b上做匹配...
我在使用我的函数泛型方面遇到一些困难,需要一些帮助.我有一个数组采用T的选项,其中T是一个分数.在F#中,有一个"选择"功能可以从一组选项中删除无.在scala中,我试图使用"flatten",但它不适用于泛型类型.
我的代码是
var arr = Array.fill(capacity)(None :Option[T])
Run Code Online (Sandbox Code Playgroud)
......后来我试着获得Some的价值观:
var flat = arr.flatten
Run Code Online (Sandbox Code Playgroud)
错误是:
错误:找不到参数m的隐含值:scala.reflect.ClassManifest [U] val flat = arr.flatten
我是一个完整的scala noob,也许不应该玩泛型:)我怎么做这个工作?
谢谢!