小编Liv*_*viu的帖子

F#比较报价

以下打印"假"

let e1 = <@@ let d = 1 in d+1 @@>
let e2 = <@@ let d = 1 in d+1 @@>

printfn "%A" (e1 = e2) 
Run Code Online (Sandbox Code Playgroud)

原因是Var节点通过指针引用进行比较,而不是通过结构相等进行比较.是否已经实现了直观地比较报价的方法?

f#

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

F#运算符重载之谜2

在F#运算符中,重载似乎很强大,但要正确就很难。我有以下课程:

 type Value<'T> = 
    with
        static member inline  (+) (a : Value<'U>, b: Value<'U>) : Value<'U> = 
           do stuff
Run Code Online (Sandbox Code Playgroud)

如果我用+为+定义另一个重载:

static member inline  (+) (a : Value<'U>, b: 'U) : Value<'U> = 
           do stuff
Run Code Online (Sandbox Code Playgroud)

有用。但是如果我想要一个对称运算符:

static member inline  (+) (b: 'U, a : Value<'U>) : Value<'U> = 
           do stuff
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

let a = Value<int>(2);
let b = a + 3 // ok
let c = 3 + a //<-- error here
Run Code Online (Sandbox Code Playgroud)

错误3类型推断问题太复杂(达到最大迭代深度)。考虑添加其他类型注释

有没有办法解决这个问题并保持通用性?

我正在使用F#3.1

谢谢

f#

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

我找不到内联表达式变量的代码

C#编译器转换它(例如):

Expression<Action> e = () =>Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)

成:

Expression<Action> expression = 
   Expression.Lambda<Action>(
       Expression.Call(null, 
                      (MethodInfo) methodof(Console.WriteLine), 
                       new Expression[0]), 
                       new ParameterExpression[0]);
Run Code Online (Sandbox Code Playgroud)

System.Linq.Expression<T>源代码中找不到任何引用.

我的想法是,使C#支持多语句lambda可能很简单.我只找到了设计时间代码分析在lambdas中阻止错误的地方.

任何想法?

c# roslyn

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

从分类器VSIX获取语义模型

由于R#不支持Roslyn Early Preview C#6.0功能,代码看起来非常沉闷......

我想使用分类器VSIX对代码着色.是否有可能从Roslyn语言服务获取当前文档的语义模型?

c# roslyn visual-studio-2013

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

语法重写

我需要使用 Roslyn 转换某个类的所有属性。

在不使引用无效的情况下对语法树应用多个转换的推荐方法是什么?


这是我尝试过的以及我陷入困境的地方:

  • 在第一遍中, 的后代CSharpSyntaxWalker访问所有PropertyDeclarationSyntax节点,并将它们存储在列表中。

  • 在第二遍中,aCSharpSyntaxRewriter正在转换节点,同时在转换之前检查每个访问的节点是否等于列表中的 1。

我的尝试的问题是:当我转换属性时,我向类添加新字段,这会导致类发生变化。列表中对其他属性的所有引用在该类的新树中变得无效。

重新访问整个类似乎效率很低,而且无论哪种方式,由于引用差异,我都无法检测到已经处理的属性节点。

c# parsing abstract-syntax-tree roslyn

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