小编ben*_*ruk的帖子

F#中这种灵活的"自我标识符"有什么好处?

虽然我理解F#中的自我标识符,但我对这种灵活性的好处感到困惑.为什么F#不仅仅this.Blah像C#一样支持并且完成它?我猜有些人用它来提高可读性,但即便如此,这似乎是一个延伸.那么,这种语言功能的用途/好处是什么?

对于未启动的,下面是一个定义类型范围的自身标识符"self"和方法范围标识符"this"的示例.该示例来自上面链接的MSDN文章.

type MyClass2(dataIn) as self =
   let data = dataIn
   do
       self.PrintMessage()
   member this.PrintMessage() =
       printf "Creating MyClass2 with Data %d" data
Run Code Online (Sandbox Code Playgroud)

f# language-features

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

如何在FsCheck中生成"复杂"对象?

我想创建一个FsCheck生成器来生成"复杂"对象的实例.复杂,我指的是C#中的现有类,它具有许多子属性和集合.这些属性和集合又需要为它们生成数据.

想象一下,这个课程以Menu儿童系列命名,Dishes并且Drinks(我正在制作它,所以忽略了糟糕的设计).我想做以下事情:

  • 生成可变数量Dishes和可变数量的Drinks.
  • 使用FsCheck API 生成DishDrink实例以填充其属性.
  • Menu使用FsCheck API 在实例上设置一些其他基本属性.

如何为这种类型的实例编写生成器?这是一个坏主意吗?(我是基于财产的测试的新手).我已经阅读了文档,但到目前为止显然未能将其全部内化.

有一个很好的例子来生成记录,但这实际上只生成3个相同类型的值float.

f# fscheck

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

有没有一种简单的方法来解码PEVerify错误和警告?

给定PEVerify错误和警告输出(如下所示),如何跟踪违规类和接口名称?假设我不是编译器作者或IL魔术师.

[MD]: Error: Class implements interface but not method (class:0x02000091; interface:0x06000169;method:0x00000000). [token:0x09000043]
[MD]: Warning: MemberRef has a duplicate, token=0x0a0001ff. [token:0x0A000060]
Run Code Online (Sandbox Code Playgroud)

.net peverify

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

是否可以打开Type Provider提供的命名空间?

有没有办法open通过类型提供程序实现提供的类型命名空间?我问,因为一些生成的类型名称路径在代码中非常长且很难看.我使用了类型缩写来缓解这种情况,但显然这是一个手动过程. F#open关键字不支持此功能.还有另外一种方法吗? 更新:正如答案和评论中指出的那样,这是错误的.您可以打开提供的类型命名空间.我没有意识到我正在查看深层嵌套类型,而不是命名空间.

f# type-providers

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

将从抽象类更改为密封类中断简单客户端使用

我改变了从一类public abstract AwesomeClasspublic sealed AwesomeClass.我还添加了一个新房产.所有现有成员均未变更.我知道这是一个突破性的变化.AwesomeClass通过反射实现或依赖它的客户将被打破.

我的问题是,那些只使用AwesomeClass我所提供的实例成员的客户是否会被破坏(如果是的话,那么如何)? 任何客户都不会依赖我实现的任何类型,AwesomeClass因为它们都是内部的.我想不是,但......

这是前后的课程:

public abstract class AwesomeClass
{
    public abstract Guid SuperGuid { get; set; }
    public abstract int SuperInt { get; set; }
}

public sealed class AwesomeClass
{
    public Guid SuperGuid { get; set; }
    public int SuperInt { get; set; }
    public int OtherSuperInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c#

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

自定义F#编译器字符串检查

是否可以"扩展"F#编译器来进行自定义编译时字符串检查?我正在考虑类似于StringFormat使用sprintf时对字符串的检查等.当我说"扩展"时,我并不是指构建编译器的自定义版本,我的意思是使用现有的支持技术.

在我的头顶,你可能有一个RegexFormat类型.您提供正则表达式,编译器将使用正则表达式进行静态分析.例如

//Setup RegexFormat with IP address regex and type abbreviation IpRegexFormat?
//Compile error.  ipAddress expects IpRegexFormat!
let ip = ipAddress "192.168.banana.1" 
Run Code Online (Sandbox Code Playgroud)

如果没有,也许这是我的类型提供者:) - 如果整个事情是一个可怕的想法,请告诉我!

f#

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

如何“发现”WinDbg 中引用计数句柄背后的 COM 对象?

我正在通过 WinDbg DMP 文件调查内存泄漏。我发现有很多实例AmazeType在堆中,虽然它是一个很好的类型,有办法存在太多。我想知道谁在囤积它们。

!gcroot-ingAmazeType引导我进入“引用计数句柄”。这是有道理的,因为真棒类型列表通过 COM 可调用包装器存储在 COM 对象实例的属性中。

0:047> !gcroot 00000001c093e448
HandleTable:
    00000000015041a0 (ref counted handle)
    -> 00000001c0932fd8 System.Collections.Generic.List`1[[AmazeType, AmazeAssembly]]
    -> 00000001c0927ef8 BaseAmazeType[]
    -> 00000001c093e448 AmazeType
Run Code Online (Sandbox Code Playgroud)

可以用引用计数句柄做什么00000000015041a0来获取有关 RCW 和与之相关的 COM 对象的信息?如果没有,如何交替攻击问题?

.net windbg

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

标签 统计

f# ×4

.net ×2

c# ×1

fscheck ×1

language-features ×1

peverify ×1

type-providers ×1

windbg ×1