gpt4 book ai didi

android - Xamarin/安卓 : F# scoping - how do I see a namespace in a different file?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:04 25 4
gpt4 key购买 nike

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

并更改按钮的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 中可见,以便我可以看到我在那里定义的任何模块?

非常感谢,罗斯

最佳答案

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

编辑 根据 Onorio Catenacci 的评论:

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

编辑编辑

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

关于android - Xamarin/安卓 : F# scoping - how do I see a namespace in a different file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com