4

Xamarin/Android:F# 作用域 - 如何在不同的文件中查看命名空间?

我知道这听起来很基础,但我似乎无法让它发挥作用。我将举例说明:

我开始一个新的解决方案,我选择一个新的 F# Android 应用程序并将其命名为 FSScopeTest1,给我 MainActivity.fs

namespace FSScopeTest1
open System
open Android.Content
open Android.OS
open Android.Runtime
open Android.Views
open Adroid.Widget

[<Activity (Label = "FSScopeTest1", MainLauncher = true)>]
type MainActivity () =
    inherit Activity ()
    let mutable count:int = 1
    override this.OnCreate (bundle) =
        base.OnCreate (bundle)
        // Set our view from the "main" layout resource
        this.SetContentView (Resource_Layout.Main)
        // Get our button from the layout resource, and attach an event to it
        let button = this.FindViewById<Button>(Resource_Id.myButton)
        button.Click.Add (fun args ->
            button.Text <- sprintf "%d clicks" count
            count <- count + 1
        )

然后我添加一个新的 F# 源文件 ScopeTestNS.fs

namespace ScopeTestNS

module ScopeTestMod =
    let astr = "some text"

然后我在第二行添加到 MainActivity.fs:

open ScopeTestNS

并更改 button.Click.Add 的 Lamba 表达式以读取

        button.Click.Add (fun args ->
            // button.Text <- sprintf "%d clicks!" count
            // count <- count + 1
            button.Text <- ScopeTestMod.astr
        )

现在,当我构建解决方案时,出现错误:

The namespace or module "ScopeTestMod" is not defined.

如何使我的命名空间 ScopeTestNS 在 MainActivity.fs 中可见,以便我可以看到我在那里定义的任何模块?

非常感谢,罗斯

4

1 回答 1

5

f# 编译器以特定顺序读取源文件(与 c# 编译器不同)。您需要确保您的项目以正确的顺序包含文件,以便您可以访问其他文件中定义的模块。

根据Onorio Catenacci 的评论进行编辑:

显然,Xamarin Studio 中使用的 F# 绑定当前不支持对 F# 项目中的文件进行重新排序(请参阅此 github 问题https://github.com/fsharp/fsharpbinding/issues/135)。但是,.fsproj 文件是简单的 xml 文件,可以使用文本编辑器进行编辑以更改文件的编译顺序。

编辑编辑

显然,xamarin studio 中的 F# 插件现在允许拖放以重新排序文件(感谢 @7sharp9 的更新)

于 2013-06-17T12:33:25.253 回答