小编Mas*_*tic的帖子

为什么我仍然获得代码合同:确保未经证实的警告?

下面是一个非常简单的例子.当我打开静态分析警告时,我仍然得到 警告CodeContracts:确保未经证实:Contract.Result()!= string.Empty

在线上

return string.Format("{0},{1}",movie.Title,movie.Description);

请看下面的代码

namespace CodeContractsSamples
{
    public class MovieRepo
    {
        public string GetMovieInfo(Movie movie)
        {
             Contract.Requires(movie != null);
             Contract.Ensures(Contract.Result<string>() != string.Empty);

             return string.Format("{0}, {1}", movie.Title, movie.Description);
         }
     }

      public class Movie
      {
         public string Title { get; set; }
         public string Description { get; set; }
      }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# design-by-contract code-contracts

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

终止前清理?

这个问题一直困扰着我:我在MSDN的DirectX 文章中读到了以下内容:

析构函数(应用程序)应该释放存储的任何(Direct2D)接口......

DemoApp::~DemoApp()
{
    SafeRelease(&m_pDirect2dFactory);
    SafeRelease(&m_pRenderTarget);
    SafeRelease(&m_pLightSlateGrayBrush);
    SafeRelease(&m_pCornflowerBlueBrush);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果所有应用程序的数据都在终止()上被释放/解除分配,为什么我会麻烦地按顺序创建一个函数来/并单独释放它们?这没有道理!

随着时间的推移,我越来越多地看到这一点,这显然真的让我烦恼.上面的MSDN文章是我第一次遇到这个问题,所以提到所有其他情况都是有意义的.

好吧,因为到目前为止我实际上并没有问我的问题,他们在这里:

  • 我需要在终止前释放一些东西吗?(请解释原因请)
  • 为什么MSDN中的作者选择这样做呢?
  • 答案与本机和托管代码有何不同?IE我在编写C#程序时是否需要确保所有内容都放在程序的末尾?(我不知道Java,但如果存在处置,我相信其他成员也会很感激答案).

谢谢!

c# c++ garbage-collection dispose

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

使用cabal安装Haskell软件包,无需连接Internet

我有一台根本没有互联网接入的机器.
我使用我从其他机器通过pendrive获得的安装程序在其上安装了Haskell平台.

现在我想repa在没有互联网访问权限的家用机器上安装软件包.我该怎么办?

我的家用机器运行Linux(Debian),我的办公室机器是Windows 7.

haskell offline cabal cabal-install

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

符合规格/ AST的规格

我有一个DSL规范,这是一个像往常一样的序列(cat).我想利用spec的解析(即conforming)来获得符合我的DSL的表达式的AST.例如

user> (s/def ::person (s/cat :person-sym '#{person} :name string? :age number?))
=> :user/person
user> (s/conform ::person '(person "Henry The Sloth" 55))
=> {:person-sym person, :name "Henry The Sloth", :age 55}
Run Code Online (Sandbox Code Playgroud)

现在它被解析了,我有我的AST,我想用它做有趣的事情,所以我想测试它和诸如此类的东西.所以现在我需要为那个AST写一个规范,这基本上就是复制了一切.实际上它比这更糟糕,因为现在我必须为s/def我之前不需要的谓词规范,因为正如文档keys所说:"根据设计,不支持内联值规范." /"规范的(强制执行的)意见是,与命名空间关键字相关联的值的规范,例如:my.ns/k,应该在该关键字本身下注册." 所以重复(省略person-sym部分):

user> (s/def ::name string?)
=> :user/name
user> (s/def ::age number?)
=> :user/age
user> (s/def ::person-ast (s/keys :req-un [::name ::age]))
:user/person-ast
Run Code Online (Sandbox Code Playgroud)

现在它似乎兼容:

user> (s/conform ::person-ast (s/conform ::person '(person "Henry The Sloth" 55)))
=> {:person-sym person, :name …
Run Code Online (Sandbox Code Playgroud)

clojure clojure.spec

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

借用检查器坚持取消引用值的生命周期

这是我遇到的问题的最小示例:

struct S<'a> {
    value: &'a mut Option<()>,
}

impl<'a> S<'a> {
    fn f<'b>(&'b mut self) {
        *self.value = Some(());
        let value: &'a () = self.value.as_ref().unwrap();
    }
}
Run Code Online (Sandbox Code Playgroud)

Playground

错误:

error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements
 --> src/lib.rs:8:34
  |
8 |         let value: &'a () = self.value.as_ref().unwrap();
  |                                        ^^^^^^
  |
note: first, the lifetime cannot outlive the lifetime `'b` as defined on the method body at 6:7...
 --> src/lib.rs:6:7
  |
6 |     fn f<'b>(&'b …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
0
解决办法
75
查看次数

GHC类型错误,我不明白

我正在教自己Haskell.

我想编写一个递归查找第一个数字的函数,该数字具有整数平方根并且小于起始数.

它看起来像这样:

findFirstSquare :: Int -> Int
findFirstSquare x
    | x <= 0                                  = error "This function only works for 1 or above"
    | fromInteger(floor(sqrt(x))) == (sqrt x) = x
    | otherwise                               = intSqrt(x - 1)
Run Code Online (Sandbox Code Playgroud)

但GHC抱怨说:

(RealFrac Int)没有因使用'floor'而产生的实例......

但是,如果我在GHCi中键入以下内容,它会愉快地编译它:

 fromInteger(floor(sqrt(4))) == (sqrt 4)
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么我从GHCi中成功编译的表达式中得到类型错误?

haskell ghc

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

什么是函数式编程的最重要的答案?

我很熟悉函数式编程和来自OOP和C#背景的F#,我注意到在函数式编程方法中,常常是静态的,在模块中根据类型(我可以理解为什么).

例如,为了工作,list你可以使用中发现的功能List模块,工作与option有与Option模块等

但是,当我接受基类的参数时,会发生什么,并且派生类有更合适的实现呢?

在OOP中,将调用适当的实现,即派生实现,即使该对象静态地是基类,因为该成员已被覆盖.

如何在函数式编程中?

如果你有基类型作为参数(你应该),你只能使用它的函数,就像你只能在OOP中调用基类的成员一样.
唯一不同的是,在OOP中,被叫成员是合适的成员.

c# oop f# overriding functional-programming

4
推荐指数
2
解决办法
542
查看次数

Cabal配置无法在cabal沙箱中找到已安装的软件包

我做了一个cabal沙箱,安装了一个包,但runhaskell Setup configure抱怨我刚刚安装的软件包依赖项丢失了.

我验证了包名称和版本,这没关系.
运行cabal install --dependencies-only说"已经安装了所有请求的包".

发生了什么以及如何解决?

如果相关我在Windows 7上使用QuickCheck-2.7.5使用cabal-install 1.20.0.3使用cabal 1.20.0.1和ghc 7.6.3.


通过runhaskell Setup configure输出配置:

配置MyPackage-0.1.0.0 ...
Setup.hs:至少缺少以下依赖项:QuickCheck == 2.7.5

haskell cabal cabal-install

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

为Monad实现Applicative(<*>)

Applicative有这个(<*>)功能:

(<*>) :: (Applicative f) => f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

了解您的Haskell显示以下功能.

鉴于:

ap :: (Monad m) => m (a -> b) -> m a -> m b  
ap f m = do
  g <- f        -- '<-' extracts f's (a -> b) from m (a -> b)
  m2 <- m       -- '<-' extracts a from m a 
  return (g m2) -- g m2 has type `b` and return makes it …
Run Code Online (Sandbox Code Playgroud)

haskell

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

当共享值超出范围时,如何处置/释放/"完成"非托管资源

我有一个类型封装外部资源的键.一旦密钥丢失(共享它的所有值都超出范围),资源应该(隐式地)在下一个垃圾收集中释放,就像内存对常规值一样.

所以我正在寻找类似于OOP处理的东西,或者ForeignPtr,我只代表对外语对象的引用(尽管如果ForeignPtr能够正确和优雅地为此工作,知道如何也回答这个问题).

可能吗?如果是这样,怎么样?

garbage-collection haskell dispose finalizer ghc

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