小编Mic*_*ich的帖子

代码合同 - ForAll - 静态验证支持什么

静态检查有很多信息Contract.ForAll只有有限或没有支持.

我做了很多实验,发现它可以用于:

  • Contract.ForAll(items, i => i != null)
  • Contract.ForAll(items, p)哪里p是类型Predicate<T>

不能用于:

  • 现场访问
  • 物业访问
  • 方法组(我认为委托在这里被分配)
  • 实例方法调用

我的问题是:

  • 有哪些其他类型的代码ForAll可以使用?
  • 代码合同是否经过Contract.ForAll(items, i => i != null)验证,以后在代码中从列表中取出一个项目(即通过索引)时,该项目不为空?

这是完整的测试代码:

public sealed class Test
{
    public bool Field;
    public static Predicate<Test> Predicate;

    [Pure]
    public bool Property
    {
        get { return Field; }
    }    

    [Pure]
    public static bool Method(Test t)
    {
        return t.Field;
    }

    [Pure]
    public bool InstanceMethod()
    {
        return Field; …
Run Code Online (Sandbox Code Playgroud)

c# static-analysis code-contracts

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

在Ubuntu的D程序中使用Sqlite的最简单方法是什么?

我想使用phobos.etc.c.sqlite3绑定.使用C编译器编译sqlite3.c以生成.o文件,然后将其与我的程序链接.

我应该使用哪个C编译器,以及哪些编译器标志?是否可以在一步中将sqlite3.o与DMD链接,而无需单独调用链接器?

或者还有其他更简单的方法吗?

答:如何在64位Ubuntu上使用D进行Sqlite

  1. 安装sqlite dev sudo apt-get install libsqlite3-dev

  2. dmd test.d -L-ldl -L/usr/lib/x86_64-linux-gnu/libsqlite3.a

test.d

import std.stdio, std.string, etc.c.sqlite3;

void main () {
    sqlite3* db;
    auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
    writeln (ret);
}
Run Code Online (Sandbox Code Playgroud)

由于sqlite3链接问题,需要-ldl开关

sqlite d

6
推荐指数
2
解决办法
1648
查看次数

标签 统计

c# ×1

code-contracts ×1

d ×1

sqlite ×1

static-analysis ×1