所以有列表?,seq?,vector ?, map?等等以确定参数的集合类型.
什么是区分它们的好方法
有没有比这更好的方法
#(or (seq? %) (list? %) etc)
Run Code Online (Sandbox Code Playgroud) 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) 如何使用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下工作.所以:
披露:这出现在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) 显然,你不能使用记录构造函数调用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代码:
(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) 我的程序中有很多记录,我最终使用其中一个字段作为键放入地图.例如
(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)
更有趣的是,合并和合并 - 支持.
如果将泛型类型与null(并且仅与null)进行比较,则会导致编译器将类型约束为nullable(可以)和equable.
为什么是后者?似乎只是比较null可以为可以为空的类型,但不支持相等.
我知道我可以Unchecked.equals用来获得可以为空的约束,只是想知道我是否缺少一些明显的理由为什么((=) null)需要一个等同的参数.