小编Str*_*ger的帖子

在Discriminated Union中键入约束

考虑一下

type Foo =
  | I of int
  | S of string



let test = [ I(5); I(9); I(7)]
Run Code Online (Sandbox Code Playgroud)

它有效,但现在我希望'test'也是Foo类型,并且仍然是我或SEg的列表

let test = L( [ I(5); I(9); I(42) ] ) //works!
let test2 = L( [ I(5); I(9); S("stuff") ] ) //type error
let test3 = L( [ I(5); I(9); L([]) ] ) //type error
Run Code Online (Sandbox Code Playgroud)

我试试..

type Foo =
  | I of int
  | S of string
  | L of 'T list when 'T :> Foo
Run Code Online (Sandbox Code Playgroud)

我知道它显然不起作用.这对我来说是一件很自然的事情.

非常感谢帮助!!

f#

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

无法使用Environment.GetResourceString静态方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = Environment.GetResourceString("test"); //compile-time error
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是:'System.Environment'不包含'GetResourceString'的定义.

编辑:OP表示他正在使用Compact Framework,v3.5.

我不明白,我的代码出了什么问题?谢谢!

c# environment compact-framework

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

缺少自定义属性时选择正确的异常类型

我在选择正确的异常类型时遇到一些麻烦时遇到了一些麻烦(我更喜欢现有的 .NET 异常之一)。

在这种情况下你有什么建议?提前致谢。

编辑:

这是他的背景:

[<ExpectedAttribute()>]
let foo args ... = ...
Run Code Online (Sandbox Code Playgroud)

该函数foo(用户定义的)被传递到运行时引擎。如果自定义属性不存在,运行时必须抛出异常。

.net exception custom-attributes

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

为什么F#Bitwise运算符用1表示签名类型?

我在按位操作上看F#doc:

按位右移运算符.结果是第一个操作数,其位向右移动第二个操作数中的位数.偏离最不重要位置的位不会旋转到最重要的位置.对于无符号类型,最高有效位用零填充.对于有符号类型,最高有效位用1填充.第二个参数的类型是int32.

与C++语言(也可能是C语言)相比,这种设计选择背后的动机是什么,其中MSB用零填充?例如:

int mask = -2147483648 >> 1; // C++ code
Run Code Online (Sandbox Code Playgroud)

其中-2147483648 =

10000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

和掩码等于1073741824

1073741824 =

01000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

现在,如果你在F#(或C#)中编写相同的代码,这确实会填充MSB,你将得到-1073741824.

其中-1073741824 =

11000000 00000000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

c# c++ f# history bit-shift

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

如何在F#中创建类实例并填充属性?

在C#中,我可以:

var n = new Person()
{
     FirstName = "John",
     LastName = "Smith"
};
Run Code Online (Sandbox Code Playgroud)

我可以在F#中做同样的事情吗?我的意思是,创建一个类指定一些属性.

syntax f# c#-to-f#

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

我应该使用继承还是接口?

有什么区别:

type IFooable =
    interface IDisposable

    abstract Foo : (unit -> unit)
Run Code Online (Sandbox Code Playgroud)

type IFooable =
    inherit IDisposable

    abstract Foo : (unit -> unit)
Run Code Online (Sandbox Code Playgroud)

如果相同,在哪种情况下我应该使用一个而不是另一个?谢谢!

inheritance f# interface

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

使用替代类语法在构造函数中添加代码

type Foo = 
    class
        inherit Bar

        val _stuff : int

        new (stuff : int) = {
            inherit Bar()
            _stuff = stuff
        }
    end
Run Code Online (Sandbox Code Playgroud)

我想在上面的构造函数中添加此代码:

if (stuff < 0) then raise (ArgumentOutOfRangeException "Stuff must be positive.")
else ()
Run Code Online (Sandbox Code Playgroud)

我怎样才能在F#中实现这一目标?

syntax f# constructor

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

在Visual Studio 2010中的条件断点中使用元组

这有可能吗?在F#或C#中?都?

例如,我想在F#程序中设置一个条件断点,如下所示:

[x] Condition:

    myTuple == (3,3)

(o) Is true
(_) Has changed
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# f# visual-studio-2010 conditional-breakpoint

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

是什么取代了弃用的any_to_string函数?

我想现在是,Object.ToString()但我不确定......谢谢!

f#

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

address-of和ref运算符之间的差异

在我的代码中,我通过引用传递一些结构,声明它们是可变的并使用&符号.问题是,在某些地方,字段已损坏(仅在发布模式下发生),我不知道为什么.

我找到了一个修复,使用ref关键字而不是address-of运算符.我知道您可以自由地交换它们(如果是实例成员参数),但为什么它可以解决我的问题?

这是一个小代码示例,说明了这一点:

[<Struct>]
type MyStruct =
    val mutable private i : int
    val mutable private f : float
    new (a, b) = { i = a; f = b }
    member t.I = t.i
    member t.F = t.f

type Printer () =
    member t.Print(data : MyStruct byref) = printfn "%d %f" data.I data.F

let bar (p : Printer) =
    let mutable x = new MyStruct(2, 8.0)
    p.Print(&x)

let foo (p : Printer) =
    let mutable y = …
Run Code Online (Sandbox Code Playgroud)

f# struct operators byref

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

Clang在LLVM IR中生成本地存储

我正在通过Clang学习LLVM IR,并发现C函数如:

int inc(int x)
{
  return x+1;
}
Run Code Online (Sandbox Code Playgroud)

生成此IR(优化已关闭):

define i32 @inc(i32 %x) #0 {
entry:
  %x.addr = alloca i32, align 4
  store i32 %x, i32* %x.addr, align 4
  %0 = load i32, i32* %x.addr, align 4
  %add = add nsw i32 %0, 1
  ret i32 %add
}
Run Code Online (Sandbox Code Playgroud)

我的问题是确切地知道为什么它首先分配一个本地(x.addr)商店,然后从它加载.

llvm clang llvm-ir

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

在VS2008监视窗口中显示CPU寄存器

是否有可能与一个监视窗口特定的语法添加CPU寄存器(RAX,EAX,旗帜,等等等等),以便显示像普通变量和印刷在基-10(或十六进制如果十六进制显示是)?

例如:

如果"注册"窗口显示RAX = 00000000027A6468,则将%rax添加到监视将导致:

Name    Value       Type
%rax    41575528    CPU Register
Run Code Online (Sandbox Code Playgroud)

谢谢 !

watch cpu-registers visual-studio-2008

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