F# 两个新Bug,集中在 module 中

新年发布F#的两个 Bug,都集中在 module 中。

第一个是:[<CLIEvent>] 特性在 module 中不起作用,CLIEvent 的作用是使 F# 的事件编译后生成标准接口,方便C#调用。但是 CLIEvent 在 module 中不运作,要实现相同的效果,只能通过 type 声明类,然后在类中声明静态事件。

第二个是:module 中声明的私有成员,在 module 外仍然可以赋值。实例代码如下:

module K1Dialog =

let mutable private Frames = 0

module test =

let test =

K1Dialog.Frames <- 1

如果第一个 Bug 可以看作一种特性,而且容易纠正解决,那么第二个 Bug则是致命的,而且隐藏在代码中难以发现。

时间: 2024-11-17 17:17:25

F# 两个新Bug,集中在 module 中的相关文章

F#新Bug,小心! module 里的泛型变量。

原则上,.Net不支持静态泛型变量,但是 F# 的语法支持,如: module Mithra = let Empty<'T> = Seq.empty <'T> 但是,这只是个语法糖而已.把这 F# 代码块编译成一个库,在C#里调用,即可看到,没有 Empty 变量,只有 Empty 函数.也就是说,这个“Empty”在 F# 里面,只是看起来像变量,实际上是在执行一个函数. 这有什么关系呢?答:有关系. 参照老赵的<逆泛型执行器>,如果有泛型变量的话.F# 下,实现逆泛

拿到一个新 bug 怎样分析

1. 拿到一个新 bug, 首先要重现问题. 这对 code 问题是必须的, 对客户的 data 问题, 几乎也是必须的. 如果是 code 问题, 不重现就没办法修改代码, 改好了也无法验证是不是改对了. 客户的 data 出问题, 多数情况也是能够重现的. 毕竟客户是用我们的系统操作的, 只要拿到客户的历史数据, 对照着是可以自己做出同样的数据. 以前我遇到 data fix 的时候不喜欢重现, 都是凭感觉给出脚本. 但这样常常忽略一些重要的数据, 容易出错. 如果确定是 data fix,

笔记:记录两个新接触的东东- required + placeholder

1.1 required="required" 1.2 placeholder 当用户还没有输入值时,输入型控件可能通过placeholder向用户显示描述性说明文字或者提示信息,这在目前网站中很常见,一些JS框架都会提供类似功能,简单的说下在旧版本中常用的解决方案,为输入控件创建一个label,然后通过CSS控制些label的位置使之覆盖在输入控件上面,当label获得焦点时,浏览器会把焦点指向输入控件.不过有了placeholder,新的浏览器就内置了这一功能,其特性值会以浅灰色样

F#编译器的一个Bug

[<Struct>] typeTestStruct = val mutable _x:int new(x) = {_x = x} member this.Set(x) = this._x <- x member this.X with get() = this._x; let a = TestStruct(2) let c() = a.Set 10 a.X c();; 这里编译器不报错,但是执行c()的结果是2. 如果把[<Struct>]去掉,执行结果是10,这就正确了.

两个新认识

前几天,跟朋友小聚吹牛,才知道 leancloud 是所谓的 Baas,而它的榜样 parse 是早已经知道的,但一直没有真正关注过,深感这几年技术已经荒废太多.联想到之前的一些反省,觉得要再开始写一下东西了. Baas 大概是新提出来的概念罢,它让可视化的后端开发成为可能,应该是移动互联网的新利器.leancloud 和 parse 大有前途,想想真是佩服那些有远见的人. 大概在半年前,因为朋友的一个项目,机缘巧合,了解一些物联网落地的可能性,也是更新了我对物联网的认识.之前一直觉得物联网没啥

加快云生态布局,小鸟云连续开放华中、华东两大新节点

云计算的未来是生态 随着云技术的迭代更新,各行各业都在"云"中快速成长,全面云化的时代悄然来袭.目前云计算市场已进入全面爆发的阶段,据Gartner预测,到2020年,全球云计算市场的规模将达到4114亿美元,而工信部在<云计算发展三年行动计划(2017-2019年)>中提出,到2019年,我国云计算产业规模要达到4300亿元.云计算的未来是生态,而云生态的中心则是数据中心. 云计算存在于数据中心,而数据中心是云计算的基础.数字化转型在重塑IT和行业的角色方面至关重要.基于

Intel推出两款新处理器路线图公布

10月份Intel会推出两款新处理器,一个是酷睿i9-9900KS,全核5GHz处理器,还有就是Cascade Lake-X系列的HEDT旗舰,今年的处理器布局大概就是这样了. 与AMD承诺每年发布一代新处理器相比,这两年Intel的CPU处理器布局有点让人乱,主要是工艺.架构繁杂,组合起来太多可能了,要涉及移动.桌面及服务器三大领域. Hardwareluxx网站日前汇总了一份Intel CPU处理器的路线图,整理的资料是比较清晰了,大家可以参考下. 首先来看移动平台的处理器路线图. 移动CP

用两个小例子来解释单例模式中的“双重锁定”

学习单例模式时,好多人都不太理解双重锁定.学完后突然想到一个很有趣的例子. 单例模式结构图: 代码: Singleton类 class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); //程序运行时创建一个静态只读的进程辅助对象 private Singleton() { } //用private修饰构造方法,防止外界利用new创建此类实例

DDD可能并非足够良好:使用两个凡是去整理你脑中的比如来自于DDD的不良概念

值是能脱离appSystem但不再有意义的对象.实体是脱离不掉appSystem的对象. 没有空中楼阁.若不是先人留下的知识帮助我们,高楼大厦不可能拔地而起.人类文明近万年无数人共同维护着的知识结构体是个相当良好的树形的.任何一个分支在使用到任何一个词汇时引用的本意都不与它的父节点冲突,那些存在冲突或有歧义的不良节点往往会在我们第一次听到它之前就已经被先人过滤掉了,或者迟早被我们或者后人纠正过来,既然这样那么只要我们曾经系统的熟悉过整棵树上某一个分支或者部分分支的话就可以通过上溯和下钻来容易的熟