小编kno*_*cte的帖子

避免使用"mutable"变量来调用带有byref(out in C#)参数的方法?

所以我在C#中有这个类:

public class Foo : IFoo {
    public bool TryConnect(out Status status) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用F#消费它.

不幸的是我不得不使用一些hackery,例如:

type FooService (foo : IFoo) =

    member x.Execute() =
        let mutable status = Unchecked.defaultof< ^Status>
        foo.TryConnect(&status) |> ignore
        (...do something with status...)
Run Code Online (Sandbox Code Playgroud)

有没有办法在这里不使用"可变"?最后,我实际上根本没有使用第一个初始化值.

(我正在使用F#2.0,但是如果你的提示只适用于F#3.0,我会很高兴听到它们.)

谢谢

f# pass-by-reference c#-to-f# f#-3.0

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

从F#初始化C#-struct?

我有一个简单的C#结构,我想从F#中使用它:

public struct Stat : IEquatable<Stat>
{
    public ulong st_dev;
    public long st_blocks;
}
Run Code Online (Sandbox Code Playgroud)

我发现这样做的方式感觉太C#ish并且对我来说是可变的:

stbuf <- new Stat()
stbuf.st_blocks <- 0
stbuf.st_dev <- 1
Run Code Online (Sandbox Code Playgroud)

更不用说在C#中我可以使用漂亮的new Stat { st_blocks = 0, st_dev = 1 }语法糖......

现在我已经转换为F#,我开始对赋值运算符过敏<-,所以有什么方法可以改善它吗?

c# f# struct c#-to-f#

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

处理元组流而没有可变性?

所以我想要一个接收Tuple <int,int>数组的函数,并返回相同的类型但具有不同的值.

我想要做的是一个返回这种值的函数:

f( [1,10; 2,20; 3,40; 4,70] ) = [2,10; 3,20; 4,30]
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,第一个数字基本没有变化(除了第一个项目没有被选中),但最后一个数字是当前数字与前一个数字的减法(20 - 10 = 10,40 - 20 = 20, ...).

我试图在F#中提出一个不涉及可变性的算法(使用前一个值的累加器意味着我需要一个可变变量),但我无法弄清楚.这可能吗?

f# tuples immutability

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

AttributeError: 'module' 对象没有属性 'cairo_font_map_get_default'

如果我尝试从 cairo 网站运行此示例,则会得到:

AttributeError: 'module' object has no attribute 'cairo_font_map_get_default'
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些包裹?(我在 Ubuntu 14.04 上)

但是,我试图找到我需要的开发包,我找到的唯一答案是this,它从 GTK2 堆栈中推荐了一些东西,但如果有的话,我对 GTK3 感兴趣,而不是 2。

python pango cairo pycairo pangocairo

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

F#继承接口

我在F#中有以下类继承了Microsoft.AspNet.Identity.IIdentityValidator接口:

type MyValidation() =
    inherit IIdentityValidator<string> with
        member x.ValidateAsync (value:string) : Task<IdentityResult> =
        .....
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

 This 'inherit' declaration specifies the inherited type but no arguments. Consider supplying arguments, e.g. 'inherit BaseType(args)'.
Run Code Online (Sandbox Code Playgroud)

为什么以及如何解决?

f# c#-to-f#

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

列出所有文件的 md5sum:使用 xargs 查找命令?

我使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹名称中包含空格。我该如何处理这些?

find -type f -name \* | xargs md5sum
Run Code Online (Sandbox Code Playgroud)

find md5sum

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

Xamarin 跨平台 - 无法连接调试器

安装完所有内容后,它无法创建模拟器。从 android studio 运行模拟器。使用 Hello world Xamarin 应用程序。它成功安装在模拟器上,但在显示白屏后停止。然后自动关闭显示此错误:

无法连接调试器。您可以在 Xamarin 诊断输出和日志上的完整异常中查看更多详细信息。

手动打开应用程序第二次也无法显示,但第三次打开它会显示只有一个标签和一个按钮的 UI。第三次它起作用了。还关闭了 android studio,以便调试器上没有冲突。

现在这里有什么问题?

mono android xamarin.android xamarin

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

如果其中之一存在异常,Async.Parallel是否取消所有作业?

我有兴趣找到F#的等价物Task.WhenAny(它处理Async<'T>而不是Task<'T>),而我发现的最接近的东西是Async.Choice,但是,此实现需要作业返回,Option<'T>而不仅仅是'T我写了自己的Async.WhenAny(从我在上找到的一些片段中进行了修改)互联网):

type internal ResultWrapper<'T>(value : 'T) =
    inherit Exception()

    member self.Value = value

module AsyncExtensions =

    let private RaiseResult (e: ResultWrapper<'T>) =
        Async.FromContinuations(fun (_, econt, _) -> econt e)

    // like Async.Choice, but with no need for Option<T> types
    let WhenAny<'T>(jobs: seq<Async<'T>>): Async<'T> =
        let wrap job =
            async {
                let! res = job
                return! RaiseResult <| ResultWrapper res
            }

        async {
            try
                do!
                    jobs
                    |> …
Run Code Online (Sandbox Code Playgroud)

.net f# asynchronous

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

F# 的 C# 公共成员初始值设定项是否有任何替代方案?

在 C# 中,可以分配公共成员来代替构造函数调用:

options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "preferred_username" }
Run Code Online (Sandbox Code Playgroud)

为了达到同样的效果,我编写了以下 F# 代码:

options.TokenValidationParameters <- (new TokenValidationParameters()) |> fun it -> (it.NameClaimType <- "preferred_username"; it)
Run Code Online (Sandbox Code Playgroud)

然而它看起来一点也不好看。

有没有更好的方法来做到这一点?apply理想的解决方案可能是像kotlin 中那样的函数?

任何帮助表示赞赏。

f# c#-to-f#

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

source(命令)设置FOO的bash脚本不会使其对其他bash脚本可见

我有以下bash脚本(名为"env.bash")由source命令使用:

#!/bin/bash
FOO=/some/path
Run Code Online (Sandbox Code Playgroud)

然后我有以下bash脚本(名为"compile.bash"):

#!/bin/bash
if [ -z "$FOO" ]; then
    echo "Need to set FOO, did you forget to source env.bash?"
    exit 1
fi 
./compile-something
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

source env.bash
./compile.bash
Run Code Online (Sandbox Code Playgroud)

我得到"需要设置FOO",为什么?如果我回复$ FOO,我可以看到它的价值.

bash shell

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

Mono和.NET DLL可互换性

单声道库是否完全可以从MS.NET引用?

反过来怎么样?

如果"sorta",那么哪些,以及有哪些限制?

.net c# mono

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

单声道仍适用于Linux桌面应用程序

我想为Linux制作一个桌面应用程序,我想知道C#/ mono是否仍适用于此.他们是否计划为GTK 3制作包装?或者是Qyoto更好的选择?另外,我想知道GTK对于Ubuntu是否是一个好主意,因为他们计划制作自己的窗口服务器.(如果我没有被误导,将使用QT ...)
任何提示都表示赞赏.

gtk mono qt

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