小编Kur*_*out的帖子

Clojure:找出一个集合是否可以选择

所以有列表?,seq?,vector ?, map?等等以确定参数的集合类型.

什么是区分它们的好方法

  • 地图(即包含键值对的内容)
  • 集合(即包含值的东西)
  • 像字符串一样的非集合值.

有没有比这更好的方法

#(or (seq? %) (list? %) etc)
Run Code Online (Sandbox Code Playgroud)

clojure clojureclr

13
推荐指数
2
解决办法
3915
查看次数

数据库部署(vsdbcmd.exe):DatabaseName和DefaultDataPath被忽略?

Visual Studio数据库版本附带了一个工具vsdbcmd.exe,该工具应该允许某人将.dbschema文件(由构建时的数据库项目生成)部署到数据库.它通过首先构建脚本然后执行它来完成此操作:

vsdbcmd.exe/a:Deploy/cs:"Data Source =(local); Integrated Security = True; Pooling = False"/ dsp:Sql/dd /model:"..Database.dbschema"/ p:TargetDatabase = TargetDB /manifest:"..\Database.deploymanifest"

我希望它可以将脚本部署到不同的数据库服务器而不会出现问题.但是,实际.mdf文件的完整路径在脚本中编码,以及对原始数据库的一些其他引用.要么没有控制它的选项,要么我找不到它.

有人用这个吗?你如何部署?我应该使用不同类型的数据库项目(我记得在"数据库项目"和"服务器项目"之间有选择的方式,但我不知道这是否重要)?

编辑

我可以覆盖.sqlcmdvars就好了,但这并没有解决问题.这是使用上面的命令从生成的.sql文件中提取的:

GO
:setvar DatabaseName "TargetDB"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\"
Run Code Online (Sandbox Code Playgroud)

因此,正确记录了"targetdb"目标数据库.但是,进一步说:

CREATE DATABASE [$(DatabaseName)]
ON 
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB)
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %) …
Run Code Online (Sandbox Code Playgroud)

database-project visual-studio-2008 visual-studio

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

使用Mercurial分隔私有版本和公共版本

如何使用Mercurial解决以下问题.

假设我有一个库Core.我现在想要开发一个名为Extension的扩展库.我想让Core在物理上与Extension分开,也就是说,Core是一个开源库,而Extension是一个基于Core的私有库(也许它包含了一些我想保留个人的东西.无论如何.).显然,我不想将Extension中的整个源代码推送到公共存储库.但另一方面,我可能希望将某些更改从Extension扩展到Core(如果我决定"将扩展部分"捐赠给Core),反之亦然(如果我想合并bug修复,请说).

您将如何解决这个问题,最大限度地降低扩展到Core的风险(一旦将历史记录推送到公共服务器,就不会再回头了!),同时保持灵活性以便对某些更改执行此操作.分行?克隆?MQS?别的什么?

我目前只熟悉克隆存储库,非常喜欢它的简单性.

编辑: 我提出了这个计划,但我无法让它在Windows下工作.两个存储库(核心和扩展).在Extension中有两个分支,也是Core和扩展.现在,你可以在Mercurial中为每个存储库注册一个钩子,所以我想在Core repo中注册一个'pretxnchangegroup'钩子,它不允许来自Extension分支的签入,就像Mercurial书中所解释的那样.除了我不太明白在Windows下工作.所以:

  • 任何人都有一个这样的例子(事实上,任何改变交易结果的钩子)在Windows下?
  • 我仍然可以使用移植来实现从Extension到Core分支的改变,对吗?

mercurial

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

为什么这个F#序列函数不是尾递归的?

披露:这出现在FsCheck中,这是我维护的F#随机测试框架.我有一个解决方案,但我不喜欢它.而且,我不明白这个问题 - 它只是被规避了.

一个相当标准的实现(monadic,如果我们要使用大词)序列是:

let sequence l = 
    let k m m' = gen { let! x = m
                       let! xs = m'
                       return (x::xs) }
    List.foldBack k l (gen { return [] })
Run Code Online (Sandbox Code Playgroud)

gen可以由选择的计算构建器替换.不幸的是,该实现消耗了堆栈空间,因此如果列表足够长,最终会堆栈溢出.问题是:为什么?我原则上知道foldBack不是尾递归,但是F#团队的聪明兔子已经在foldBack实现中绕过了它.计算构建器实现中是否存在问题?

如果我将实现更改为以下,一切都很好:

let sequence l =
    let rec go gs acc size r0 = 
        match gs with
        | [] -> List.rev acc
        | (Gen g)::gs' ->
            let r1,r2 = split r0
            let y = g size r1
            go gs' (y::acc) size r2
    Gen(fun n r -> …
Run Code Online (Sandbox Code Playgroud)

f# tail-recursion tail-call-optimization

8
推荐指数
2
解决办法
702
查看次数

Clojure记录构造函数不是一流的?

显然,你不能使用记录构造函数调用apply:

(defrecord Foo. [id field])

(apply Foo. my-list)
Run Code Online (Sandbox Code Playgroud)

在读取时失败,因为它不期待Foo.在那个地方.

我能想到的唯一明显的解决方法是添加工厂功能:

(make-foo [id field] (Foo. id field))
Run Code Online (Sandbox Code Playgroud)

当然可以申请.

我错过了什么吗?我希望这可以来自C#/ Java,但只是觉得它在Clojure中有点令人失望......

clojure clojureclr

7
推荐指数
2
解决办法
2087
查看次数

编写.NET互操作函数的惯用法

如果可能的话,我正在寻找一种更惯用的方法来编写以下clojure代码:

(import '(System.Net HttpWebRequest NetworkCredential)
        '(System.IO StreamReader)) 

(defn downloadWebPage
  "Downloads the webpage at the given url and returns its contents."
  [^String url ^String user ^String password]
  (def req (HttpWebRequest/Create url))
  (.set_Credentials req (NetworkCredential. user password ""))
  (.set_UserAgent req ".NET")
  (def res (.GetResponse req))
  (def responsestr (.GetResponseStream res))
  (def rdr (StreamReader. responsestr))
  (def content (.ReadToEnd rdr))
  (.Close rdr)
  (.Close responsestr)
  (.Close res)
  content
  )
Run Code Online (Sandbox Code Playgroud)

这是在ClojureCLR上工作的.(事实上​​它是CLR变种并不重要)

我想摆脱defs(替换为let?它们可以互相引用吗?)

如何更好地进入流 - 请记住..链接不起作用,因为我需要稍后关闭流.

编辑:在答案之后,我发现在.NET中使用WebClient类下载网页更容易.我仍然使用了许多Michal的推荐方法 - 只想记录我现在认为最好的答案:

(defn download-web-page
    "Downloads the webpage at the given url …
Run Code Online (Sandbox Code Playgroud)

clojure clojureclr

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

Clojure - 用固定值 - >键功能映射或设置?

我的程序中有很多记录,我最终使用其中一个字段作为键放入地图.例如

(defrecord Foo. [id afield anotherfield])
Run Code Online (Sandbox Code Playgroud)

然后我将其添加到id为关键的地图中.这一切都非常可行,但有点单调乏味,例如在向地图添加新的Foo实例时,我需要先提取密钥.我想知道clojure.core中的某个地方是否存在已经存在的数据结构?

基本上我想通过在集合的构造时给组映射函数(即:id)设置一个值来构造一组Foo,然后在我想添加/查找/删除/时使用它. . 一个值.

所以代替:

(assoc my-map (:id a-foo) a-foo))
Run Code Online (Sandbox Code Playgroud)

我能做到,说:

(conj my-set a-foo)
Run Code Online (Sandbox Code Playgroud)

更有趣的是,合并和合并 - 支持.

clojure clojureclr

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

为什么空检查会导致F#中的等式约束?

如果将泛型类型与null(并且仅与null)进行比较,则会导致编译器将类型约束为nullable(可以)和equable.

为什么是后者?似乎只是比较null可以为可以为空的类型,但不支持相等.

我知道我可以Unchecked.equals用来获得可以为空的约束,只是想知道我是否缺少一些明显的理由为什么((=) null)需要一个等同的参数.

f# type-constraints

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