我刚开始使用F#,这是我的第一个功能语言.我一直在使用C#进行准独家工作,并且很享受F#引导我重新思考如何编写代码.我觉得有点迷惑的一个方面是编写代码的过程发生了变化.我现在已经在C#中使用TDD多年了,非常感谢有单元测试知道我在哪里.
到目前为止,我用F#过程中一直写一些功能,和他们一起玩与交互式控制台,直到我在"合理"确保他们的工作,并调整与合并.这适用于像欧拉项目这样的小规模问题,但我无法想象以这种方式构建大的东西.
人们如何进行单元测试并为F#程序构建测试套件?是否有相当于TDD?任何指针或想法都表示赞赏.
功能语言很好,因为它们通过消除状态来避免错误,但也因为它们可以很容易地自动并行化,而不必担心线程数.
作为Win32开发人员,我可以将Haskell用于我的应用程序的一些dll吗?如果我这样做,是否会为我自动采取真正的优势?如果是这样,那么编译器给我这个优势呢?
F#是否并行自动编写多个内核和cpu的函数?你会看到任务管理器中的线程数增加吗?
基本上我的问题是,如何以实用的方式开始使用Haskell,如果我这样做,我真的会看到一些好处吗?
我尝试在gallio-users列表中询问此问题,但问题未能出现(Google Groups称帖子成功).我想这个列表可能会被那些不经常阅读他的电子邮件的人主持:-)看到SO有Gallio和MbUnit的标签,我认为这里值得一提.
我看到MbUnit头版提到他们热衷于维护Mono兼容性.还有一个> 1年的关于gallio用户的帖子说它在Linux下不起作用
如果删除Parallelizable属性,我想测试的项目在Mono下编译得很好.我可以Gallio在Linux下启动控制面板,但不能启动Icarus或Echo.
有没有办法MbUnit在Linux下运行测试?使用命令行(如Gallio.Echo)并且不需要Monodevelop的东西会特别有用.
我刚刚开始使用F#,我找不到像C#3那样进行对象初始化的语法.
即这样:
public class Person {
public DateTime BirthDate { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何在F#中编写以下内容:
var p = new Person { Name = "John", BirthDate = DateTime.Now };
Run Code Online (Sandbox Code Playgroud) 在F#中,使用管道前向运算符|>非常常见.但是,在Haskell中,我只见过使用过的函数组合(.).我知道它们是相关的,但是有没有一种语言原因在Haskell中没有使用管道转发,还是其他什么?
我为一家技术公司工作,该公司比产品发货做更多的原型设计.我刚才被问到C#和F#有什么区别,为什么MS创建F#以及它会比C#更好.
我一直在使用这种语言,我喜欢它,所以我可以很容易地继续讨论F#的强大功能,但是我缺乏C#的经验来说明为什么我们应该使用它而不是另一种.
使用C#vs F#或F#vs C#有什么好处?
为什么F#中的函数和Ocaml(可能还有其他语言)默认不是递归的?
换句话说,为什么语言设计者决定明确地让你输入如下rec声明是一个好主意:
let rec foo ... = ...
Run Code Online (Sandbox Code Playgroud)
并且默认情况下不提供函数递归功能?为什么需要显式rec构造?
Travis CI持续集成服务正式支持多种语言,但不支持C#或F#.
我可以在我的.net项目中使用它吗?
当我let! read = from.AsyncRead buf在F#中执行时,它会阻塞并且在TCP套接字死亡之前不会返回.为什么?我该如何解决?
它的代码:
module StreamUtil
open System.IO
/// copy from 'from' stream to 'toStream'
let (|>>) (from : Stream) (toStream : Stream) =
let buf = Array.zeroCreate<byte> 1024
let rec doBlock () =
async {
let! read = from.AsyncRead buf
if read <= 0 then
toStream.Flush()
return ()
else
do! toStream.AsyncWrite(buf, 0, read)
return! doBlock () }
doBlock ()
Run Code Online (Sandbox Code Playgroud)
它是从这段代码调用的:
use fs = new FileStream(targPath, FileMode.CreateNew, FileAccess.ReadWrite)
do! req.InputStream |>> fs
Run Code Online (Sandbox Code Playgroud)
并使用来自Windows Phone 7.1模拟器的此代码通过HTTP请求:
public …Run Code Online (Sandbox Code Playgroud) 我一直在做F#开发一段时间,我喜欢它.然而,我知道在F#中不存在的一个流行语是更高级的类型.我已经阅读了关于高等类型的材料,我想我理解他们的定义.我只是不确定他们为什么有用.有人可以在Scala或Haskell中提供一些高级类型易于使用的示例吗?这需要F#中的变通方法?同样对于这些示例,如果没有更高级的类型(或F#中反之亦然),解决方法是什么?也许我只是习惯于解决它,我没有注意到这个功能的缺席.
(我认为)我得到的不是myList |> List.map f或myList |> Seq.map f |> Seq.toList更高的kinded类型允许你简单地写myList |> map f,它将返回一个List.这很好(假设它是正确的),但似乎有点小?(并且不能简单地通过允许函数重载来完成?)我通常转换为Seq无论如何然后我可以转换为我想要的任何东西.再说一次,也许我只是习惯于解决它.但有没有任何一个例子,高级类型的类型真的可以节省你的击键或类型安全?