小编Ric*_*ich的帖子

F#中无法使用无限类型(也就是递归类型)吗?

当我提出F#似乎不支持Infinite Types时,我正在Twitter上与Sadek Drobi聊天.事实证明,在C#中你可以沿着这些方向做点什么:

delegate RecDelegate<T> RecDelegate<T>(T x);
Run Code Online (Sandbox Code Playgroud)

然而,经过对我们两个部分的一些实验,我们确定F#中的相同内容似乎不可能是隐式和显式的.

明确:

type 'a specialF = 'a->specialF<'a>
Run Code Online (Sandbox Code Playgroud)

错误FS0191:此类型定义涉及通过缩写,结构字段或继承关系的立即循环引用.

隐式:

let rec specialF (x: 'a) = specialF
Run Code Online (Sandbox Code Playgroud)

类型不匹配.期待'b但是给'a - >'b.在统一''b'和'' - >'b'时,结果类型将是无限的.

当然,这些是故意简单的样品.

我想知道我是不是错了.也许我错过了某种必要的注释?

f# types type-inference

12
推荐指数
2
解决办法
1709
查看次数

是否有可能确定事先将.NET程序集用于哪种语言?

这开始是一种查找C++/CLI和托管C++程序集的方法,以便可以测试它们内部的所有类,以确保重新实现所有继承的方法.我想将此添加为构建过程步骤,以确保它不会再次发生.

考虑到这个问题也让我有点好奇,因为能够确定使用的任何.NET语言会很有趣.因此,我进一步比较了所有.NET语言的程序集.到目前为止,我通过我编写的一个小程序发现了这一点,它通过反射比较来自任何.NET程序集的类型和属性数据:

  • C# - 具有AssemblyConfigurationAttribute,具有GuidAttribute
  • VB - 有许多额外的"我的"类型(例如MyApplication,MySettings),有GuidAttibute
  • F# - 具有FSharpInterfaceDataVersionAttribute,它还指定所使用的编译器的版本.
  • C++(除了/ clr:safe之外) - 有一堆额外的类型(FrameInfo,type_info)
  • C++/clr:safe - 似乎没有独特的反射功能.

按此顺序解析可能是合理的:

  1. 如果它具有FSharpInterfaceDataVersionAttribute,则为F#
  2. 它是C++,如果它有我发现的大量额外类型中的任何一种.
  3. 它是VB,如果它有"我的*"类型.
  4. 它是C#,如果它有AssemblyConfigurationAttribute或GuidAttribute
  5. 它可能是C++/clr:安全

然而,由于这是一个可怕的黑客,我想在这里检查,以确保没有其他选项可用.

.net clr managed-c++ c++-cli managed

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

如何解释FrontPage扩展中的错误代码?

错误的答案是由愚蠢的赏金系统自动选择的.

我用头版扩展描述与SharePoint Services 3.0的互动在这里.

在大多数样本中,我看到客户端只是在结果中查找特定的英文字符串,并使用它来确定是否发生了错误.但是,我正在编写一个可以广泛部署并放在非英语SharePoint服务器上的应用程序,因此我想使用返回的错误代码.

不幸的是,错误代码的文档定义很差.它包含如下宝石:

虽然许多RPC协议方法都有唯一的错误消息,但大多数依赖于标准的错误消息格式来在方法无法正确完成时中继信息.

嗯,这将是什么"标准错误消息格式"......和

状态是FrontPage Server Extensions针对遇到的情况的错误代码.osstatus是操作系统的错误代码..

也很可悲的是:

通常,代码是整数值,消息是汇总错误的文本字符串.

但是没有一张表描述了这些错误的可能内容.

在我看来,操作系统错误代码可能是一个HRESULT,但我不知道在SharePoint错误代码的潜在来源方面要寻找什么.我唯一的线索是status = 589826似乎表明文件已经存在.

错误的答案是由愚蠢的赏金系统自动选择的.

asp.net error-handling sharepoint frontpage

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

是否可以爆炸数组,以便可以使用params关键字将其元素传递给方法?

以这个非编译代码为例:

public string GetPath(string basefolder, string[] extraFolders)
{
    string version = Versioner.GetBuildAndDotNetVersions();
    string callingModule = StackCrawler.GetCallingModuleName();
    return AppendFolders(basefolder, version, callingModule, extraFolders);
}
private string AppendFolders(params string[] folders)
{
    string outstring = folders[0];
    for (int i = 1; i < folders.Length; i++)
    {
        string fixedPath = folders[i][0] == '\\' ? folders[i].Substring(1) : folders[i];
        Path.Combine(outstring, fixedPath);
    }
    return outstring;
}
Run Code Online (Sandbox Code Playgroud)

这个例子是我正在使用的测试代码的简化版本.请,我只对直接与param关键字有关的解决方案感兴趣.我知道列表和其他类似的东西是如何工作的.

有没有办法"爆炸"extraFolders数组,以便它的内容可以与其他参数一起传递到AppendFolders?

c# parameters params-keyword variadic-functions keyword

5
推荐指数
2
解决办法
1507
查看次数

使用无类型的F#引用来复制数组而不知道类型

我正在开发一个小项目来使用引用来克隆一些基本记录类型的树,并且我在大多数情况下都使用它,我遇到的最大问题是数组.

module FSharpType = 
    /// predicate for testing types to see if they are generic option types
    let IsOption (stype: System.Type) = stype.Name = "FSharpOption`1"
    /// predicate for testing types to see if they are generic F# lists
    let IsList (stype: System.Type) = stype.Name = "FSharpList`1"


module RecordCloning =
    let inline application prms expr = Expr.Application(expr, prms)
    let inline coerse typ expr = Expr.Coerce(expr, typ)

    let (|IsMapType|_|) (t: Type) = 
        if t.IsGenericType && t.GetGenericTypeDefinition() = typedefof<Map<_,_>> then Some t
        else …
Run Code Online (Sandbox Code Playgroud)

arrays f# quotations

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

使用C#应用程序中的自定义URL启动Web浏览器的最佳方法是什么?

众所周知,使用System.Diagnostics.Process.Start是从C#应用程序启动URL的方法:

System.Diagnostics.Process.Start(" http://www.mywebsite.com ");

但是,如果此URL无效,则应用程序似乎无法知道呼叫失败或原因.有没有更好的方法来启动Web浏览器?如果没有,url验证的最佳选择是什么?

.net c# browser

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