相关疑难解决方法(0)

F#中命名空间和模块之间的区别是什么?

我刚开始学习F#(之前几乎没有.NET经验),请原谅我可能是一个非常简单的问题:F#中命名空间和模块之间的区别是什么?

谢谢

戴夫

编辑:谢谢Brian的回答.这就是我想知道的.只是澄清:您是否也可以打开命名空间(类似于C#using语句)?

f# namespaces module

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

F#中的AutoOpen属性

使用AutoOpen属性的推荐原则是什么?

(这个问题可能是在类似命名类型上何时使用模块功能VS静态功能的延续)

专家F#指出"当你定义ad hoc顶级运算符和函数时,这可能很有用:"

因此,这似乎可以减少代码组织中的模块角色,当您在技术上需要编写代码但从客户端角度删除它的存在时.

还有别的吗?你什么时候使用它?

f# code-organization

28
推荐指数
2
解决办法
4075
查看次数

定义模块VS.NET与F#Interactive

我编写了这段代码,它在VS.NET 2010中编译并完美地运行

module ConfigHandler
open System
open System.Xml
open System.Configuration

let GetConnectionString (key : string) =
  ConfigurationManager.ConnectionStrings.Item(key).ConnectionString
Run Code Online (Sandbox Code Playgroud)

但是,当我执行控制+ A和Alt + Enter将其发送到FSI时,我收到错误

ConfigHandler.fs(2,1):错误FS0010:定义中结构化构造的意外启动.预期'='或其他令牌.

好.

所以我将我的代码更改为

module ConfigHandler =
  open System
  open System.Xml
  open System.Configuration

  let GetConnectionString (key : string) =
    ConfigurationManager.ConnectionStrings.Item(key).ConnectionString
Run Code Online (Sandbox Code Playgroud)

现在Control + A,Alt + Enter成功了,我很好地告诉我FSI

module ConfigHandler = begin val GetConnectionString:string - > string end

但是现在如果我尝试在VS.NET 2010中编译我的代码,我会收到一条错误消息

库或多文件应用程序中的文件必须以命名空间或模块声明开头,例如'namespace SomeNamespace.SubNamespace'或'module SomeNamespace.SomeModule'

我怎么能两个都有?能否在VS.NET中编译并能够将模块发送到FSI?

f# f#-interactive

9
推荐指数
2
解决办法
2215
查看次数

错误FS0037有时候,非常混乱

如果我编写以下F#代码,编译器会发出错误.

let a = 123
let a = 123
Run Code Online (Sandbox Code Playgroud)

产生的错误是:

错误FS0037:值'a'的重复定义

如果我在这样的函数中编写相同的代码:

let fctn = 
    let a =123
    let a =123
    a
Run Code Online (Sandbox Code Playgroud)

它不会产生任何错误.

我不明白其中的区别.有人可以解释一下吗?

编辑:我在模块级写的第一个代码.

f# functional-programming shadowing

3
推荐指数
2
解决办法
169
查看次数

如何执行这个F#函数

我尝试以多种方式执行以下函数,但总是出错.那我该如何执行constructQuery:

type PersonName =
| FirstOnly of string
| LastOnly of string
| FirstLast of string * string

let constructQuery personName = 
    match personName with
    | FirstOnly(firstName) -> printf "May I call you %s?" firstName
    | LastOnly(lastName) -> printf "Are you Mr. or Ms. %s?" lastName
    | FirstLast(firstName, lastName) -> printf "Are you %s %s?" firstName lastName
Run Code Online (Sandbox Code Playgroud)

-编辑-.

我试过调用这个函数:

constructQuery "himekami"
constructQuery ("himekami" : PersonName.FirstOnly)
constructQuery PersonName.FirstOnly("himekami")
Run Code Online (Sandbox Code Playgroud)

和产生的错误是这样的:

Analyzer.fs(12,17): error FS0001: This expression was expected to have type
PersonName    
Run Code Online (Sandbox Code Playgroud)

但这里有字符串 …

f#

0
推荐指数
1
解决办法
95
查看次数