标签: f#-interactive

F#:String.Join和|>运算符

在F#interactive中,我可以String.Join("+", ["a"; "b"])成功使用,但是

["a"; "b"] |> String.Join "+"
Run Code Online (Sandbox Code Playgroud)

产生错误:

Script1.fsx(79,15): error FS0001: This expression was expected to have type
    string list -> 'a    
but here has type
    string
Run Code Online (Sandbox Code Playgroud)

如何String.Join使用管道传递集合?

PS同样的问题是 lines |> File.WriteAllLines "filename.txt"

f# f#-interactive

37
推荐指数
2
解决办法
1万
查看次数

如何使用printf自定义自定义类型的输出?

我已经阅读了很多专家F#,正在构建一个实际的应用程序.在调试时,我已经习惯于传递这样的fsi命令,以使repl窗口中的内容清晰可见:

fsi.AddPrinter(fun (x : myType) -> myType.ToString())
Run Code Online (Sandbox Code Playgroud)

我想扩展它以使用printf格式化程序,所以我可以输入例如

printf "%A" instanceOfMyType 
Run Code Online (Sandbox Code Playgroud)

并控制自定义类型的输出.本书暗示可以做到这一点(第93页,"可以扩展通用结构格式以适用于任何用户定义的数据类型,F#网站上涵盖的主题"),但我没有找到任何关于如何实际上实现这一点.有谁知道怎么样?它甚至可能吗?

编辑:

我应该包含一个代码示例,它是我正在处理的记录类型,例如

type myType = 
    {a: int}        
    override m.ToString() = "hello"

let t = {a=5}
printfn "%A" t
printfn "%A" (box t)  
Run Code Online (Sandbox Code Playgroud)

两个印刷语句产生:

{a = 5;}
Run Code Online (Sandbox Code Playgroud)

printf f# string-formatting f#-interactive

30
推荐指数
2
解决办法
9423
查看次数

F#,名称空间,模块,fs和fsx

我知道有关F#中的模块和命名空间的其他 问题,但他们现在没有帮助我.

我有一个项目

Utilities.fs

namespace Company.Project.Namespace
module Utilities = 
     //stuff here
Run Code Online (Sandbox Code Playgroud)

Functions.fs

namespace Company.Project.Namespace
open Utilities

module Functions = 
     //stuff here
Run Code Online (Sandbox Code Playgroud)

而我正试图在fsx中测试它们:

#load "Utilities.fs"
#load "Functions.fs"
Run Code Online (Sandbox Code Playgroud)

error FS0039: The namespace or module 'Utilities' is not defined当我尝试将它发送到FSI时,它给了我Alt-Enter.

我已经尝试在脚本文件的顶部添加相同的命名空间,但它不喜欢这样.

奇怪的是后台编译器没有对我大喊大叫.

这似乎有效,但它是正确的approch?

#load "Utilities.fs"
open Company.Project.Namespace
#load "Functions.fs"
Run Code Online (Sandbox Code Playgroud)

在某个地方是否有一个'参考'FSharp项目,其中包含如何集成所有这些内容的示例:命名空间,模块,类,脚本文件,测试等?

f# namespaces module projects-and-solutions f#-interactive

27
推荐指数
2
解决办法
1万
查看次数

F#interactive:在当前打开的解决方案中引用项目

我想将F#交互式控制台与Visual Studio 2010中当前打开的解决方案中的项目一起使用.是否有一种快速简便的方法在F#交互式控制台中添加引用以引用当前打开的解决方案中的项目?

f# f#-interactive

27
推荐指数
4
解决办法
8447
查看次数

F#交互式shell(fsi)教程?

我正在使用Mac OS X/mono上的fsi学习F#,但是很难知道退出和退出shell的命令.

退出,或^ D不起作用,^ C也不起作用.停止fsi的命令是什么?

一般来说,我在哪里可以找到关于fsi的教程/用户指南?

f# f#-interactive

23
推荐指数
2
解决办法
7660
查看次数

如何在dotnet核心中运行F#interactive(fsi.exe)?它支持吗?

我无法在windows或linux上运行find/run fsi.exe.它无处可寻.也许它不受支持?

.net linux f# f#-interactive .net-core

23
推荐指数
2
解决办法
2343
查看次数

F#使用活动模式映射正则表达式匹配

我发现这篇关于使用带有正则表达式的活动模式的有用文章:http: //www.markhneedham.com/blog/2009/05/10/f-regular-expressionsactive-patterns/

文章中使用的原始代码段是:

open System.Text.RegularExpressions

let (|Match|_|) pattern input =
    let m = Regex.Match(input, pattern) in
    if m.Success then Some (List.tl [ for g in m.Groups -> g.Value ]) else None

let ContainsUrl value = 
    match value with
        | Match "(http:\/\/\S+)" result -> Some(result.Head)
        | _ -> None
Run Code Online (Sandbox Code Playgroud)

如果找到至少一个网址以及该网址是什么(如果我正确理解了该网址片段),会告诉您

然后在评论部分Joel建议这个修改:

替代方案,因为给定的组可能是也可能不是成功匹配:

List.tail [ for g in m.Groups -> if g.Success then Some g.Value else None ]
Run Code Online (Sandbox Code Playgroud)

或者,您可以为组添加标签,并希望按名称访问它们:

(re.GetGroupNames()
 |> Seq.map (fun n -> (n, m.Groups.[n]))
 |> Seq.filter (fun …
Run Code Online (Sandbox Code Playgroud)

regex f# f#-interactive active-pattern

19
推荐指数
1
解决办法
1万
查看次数

如何在VS2010中清除F#中的屏幕?

有没有办法清除VS2010中的F#交互窗口?

#cls;;并且#clear;;不工作.

退出#quit;;导致重新启动F#interactive而不清除窗口内容.

尝试使用"删除"或"退格"删除文本会显示错误消息,指出文本是只读的.

f# visual-studio-2010 f#-interactive

19
推荐指数
2
解决办法
3999
查看次数

如何加载外部F#脚本文件并在F#interactive中使用它?

我想将一个或多个.fsx文件加载到F#interactive中,并.fsx在范围内的文件中定义所有函数,以便我可以直接使用控制台中的函数.

#load指令执行.fsx指定的文件,但后来我不再能够在.fsx文件中使用这些函数.有什么解决方法吗?谢谢.

f# f#-interactive

19
推荐指数
2
解决办法
8359
查看次数

如何在F#interactive中使用断点?

我已经开始使用VS2010和F#interactive研究算法中的一些想法.

所以,我创建了一个DebugScript.fsx,我在那里写了一些代码并最终将它发送给F#Int进行测试.

在某些时候我需要抓住一个bug.但即使在一个简单的for循环中,我也无法设置断点:

for i in stringarray do
    printfn "%s" i
Run Code Online (Sandbox Code Playgroud)

当我按F9设置断点时,VS会显示一个带有警告标志的红色圆圈.它的提示是"断点当前不会被击中".

当然,我确实打开了Debug菜单 - > Attach to process ... - > Fsi.exe

我尝试Debugger.Break()在循环内部放置,但这是调试器停止的唯一行,这使我无法继续在循环内部调试行.我也没有任何局部变量:(

也许我错过了一些明显的东西?

debugging f# breakpoints f#-interactive

18
推荐指数
3
解决办法
5316
查看次数