所以,我正在深入探讨Clojure.Spec.
我偶然发现的一件事是,在哪里提出我的规格.我看到三个选择:
在大多数示例中,我发现在线,有一个大spec.clj文件,在主命名空间中需要.它具有所有(s/def),并(s/fdef)为所有的"数据类型"和功能.
优点:
魂斗罗:
你可以把你(s/def)和(s/fdef)旁边你的产品代码.这样,实现和规范共存于同一个命名空间中.
优点:
魂斗罗:
然后我想,也许Specs是第三种代码(在生产和测试之后).所以也许他们应该拥有自己的命名空间结构,如下所示:
?? src
? ?? package
? ?? a.clj
? ?? b.clj
?? test
? ?? package
? ?? a_test.clj
? ?? b_test.clj
?? spec
?? package
?? a_spec.clj
?? b_spec.clj
Run Code Online (Sandbox Code Playgroud)
优点:
魂斗罗:
谁有使用其中一种方法的经验?
还有其他选择吗?
您如何看待不同的选择?
在使用Ruby和Rails很长一段时间后,我想尝试RVM.一切正常,除了一件事:
在一个新开的终端ruby指向系统的红宝石,尽管事实上,我使用了rvm --default命令.
user@terra ~ $ ruby -v
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10]
user@terra ~ $ which ruby
/opt/local/bin/ruby
user@terra ~ $ rvm list
ruby-1.8.7-p334 [ ]
=> ruby-1.9.2-p180 [ ]
Run Code Online (Sandbox Code Playgroud)
我打电话后一切都很好 rvm reload
user@terra ~ $ rvm reload
user@terra ~ $ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.1]
tmangner@terra ~ $ which ruby
/Users/user/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
Run Code Online (Sandbox Code Playgroud)
我.bash_profile按照文档中的描述设置了我:
[[ -s "/Users/user/.rvm/scripts/rvm" ]] && source "/Users/user/.rvm/scripts/rvm"
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.非常感谢.
我正在使用Mac OS X Snow Leopard(10.6.6)
更新:
这--default …
让我们设想一个带有两个提交按钮的HTML表单.其中一个位于表格的上半部分,并做一些不那么重要的事情.另一个按钮是实际提交按钮,用于保存输入的数据.此按钮位于表单的末尾.这两个按钮将触发不同的动作网址.
有经验的用户喜欢通过按"输入"或"返回"而不是单击相应按钮来提交表单.
不幸的是,浏览器将查找当前表单的第一个提交按钮,并使用它来执行表单提交.因为在我的表单中第二个按钮是实际的提交按钮,我需要告诉浏览器使用这个特定按钮(或与之关联的action-url).
我没有链接javascript监听器,它正在寻找按键或类似的东西.所以我正在寻找一个更好的解决这个问题的方法.但是,欢迎javascript或jquery解决方案(没有keypressed-listerner).
非常感谢你的帮助.
我用了最后几天深入挖掘了Clojure和ClojureScript中的clojure.spec.
到现在为止我觉得最有用的,使用规格为警卫:pre和:post在依赖于数据在一定格式的公共职能.
(defn person-name [person]
{:pre [(s/valid? ::person person)]
:post [(s/valid? string? %)]}
(str (::first-name person) " " (::last-name person)))
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,我得到一个java.lang.AssertionError: Assert failed: (s/valid? ::person person)没有任何关于究竟没有达到规范的信息.
有没有人一个想法如何得到一个更好的错误信息中:pre或:post警卫?
我知道conform和explain*,但这对那些:pre或:post警卫没有帮助.
我正在尝试将我的一个Rails项目升级到Ruby 1.9.2.一切都很顺利,但一次RSpec测试破了.在这个测试中我require是一个Ruby lib:
# file spec/models/my_lib_spec.rb
require 'spec_helper'
require 'lib/services/my_lib'
describe "MyLib" do
it "should do something" do
...
Run Code Online (Sandbox Code Playgroud)
lib看起来像这样:
# file lib/services/my_lib.rb
class MyLib
def self.do_something
...
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.8.7(REE)中,测试运行良好:
$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby
Enterprise Edition 2011.03
$ rspec ./spec/models/my_lib_spec.rb
..
Finished in 1.4 seconds
2 examples, 0 failures
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.9.2中我得到一个错误no such file to load:
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0]
$ …Run Code Online (Sandbox Code Playgroud) 我有一个复杂的标签块(<h3>,, <p>...),我想根据条件使用链接呈现或没有链接.
我知道link_to_if这样的作品:
<% link_to_if condition, name, path %>
Run Code Online (Sandbox Code Playgroud)
如果条件false只是将呈现的名称.
我知道的link_to有&block:
<% link_to path do %>
[complex content]
<% end %>
Run Code Online (Sandbox Code Playgroud)
我想要两者的结合.如果条件是,则link_to_if接受a 的语句&block,以便在没有链接的情况下呈现块false.不幸的是,link_to_if声明的&block作品不像link_to声明:(
有没有人对我提出建议?任何帮助都非常感谢
我用Grails写了一个小的Web应用程序.生成的war文件部署在Tomcat应用程序服务器上.
该应用程序具有附件的上传功能.我选择将上传的文件保存到磁盘(而不是在数据库中存储blob).
起初我在webapp-dir中选择了一个文件路径来存储文件,但后来我意识到这个目录将被每个新war文件的部署覆盖.
是否有一个最佳实践的"何处上传的文件存储在您的本地文件系统"?
谢谢你的帮助.
我想知道我是如何规定一个函数,它有一个参数,在一个原子中保存一个映射.
(defn do-something [a]
(prn (vals @a)))
Run Code Online (Sandbox Code Playgroud)
这些显然不起作用:
(s/fdef do-something
:args (s/cat :a map?))
Run Code Online (Sandbox Code Playgroud)
我怎么说这a是对地图的引用?