我是Clojure的新手,我开始尝试构建应用程序.
到目前为止,我所看到的有关编译Clojure程序的教程的所有内容都涉及交互性.例如,"加载REPL并键入(加载文件"this-or-that")以运行.这很好,但这还不够.
我已经习惯了C语言或Delphi等语言的编辑 - 编译 - 运行习惯,我本能地驱动编辑,然后点击"Mx编译".
问题是"lein uberjar",我理解相当于"make",即使对于一个你好的世界也很难执行.因此,我将不得不弄清楚这种"交互式开发"的东西是如何工作的,停止使用像它快速制作的超级发布,并且只在一天结束时保存它.
我在构建时注意到的另一件事(使用lein uberjar)是我正在处理的小GUI应用程序在编译过程中弹出帧,就像它们在编译时执行一样.这对我来说似乎有点违反直觉; 它并不像我想象的那样类似于"制造".
我知道Lisp的开发方式是在REPL中交互式工作,我并不想改变它:我想适应这种生活方式.不幸的是,我没有看到关于如何这样做的文档形式.例如,如何重置机器的当前状态.只是继续编译各个片段而不能进行某种重置似乎有点麻烦.
我在Clojure(和Lisp)上看到的大多数教程似乎都专注于在REPL中进行黑客攻击.应用程序部署的最佳实践对我来说仍然是一个谜.我的用户只是用户; 他们不会成为将文件加载到REPL的开发人员.
所以这是我的问题:任何有关构建Clojure应用程序的整个过程(包括部署)的良好信息或教程的资源?
(注意:我已经安装并运行了所有先决条件(例如Emacs,Slime,Leiningen等),所以这不是一个问题).
Haskell中是否有一个库函数可以自己编写一个函数n次?
例如,我有这个功能:
func :: a -> a
Run Code Online (Sandbox Code Playgroud)
我想这样做:
func . func . func . func . func . func , ...
Run Code Online (Sandbox Code Playgroud)
(最多n次,其中n仅在运行时已知).
请注意,迭代函数不适合我正在做的事情,因为我不关心任何中间结果.
如何将时区感知日期时间对象转换为本地时区的等效非时区感知日期时间?
我的特定应用程序使用Django(虽然,这实际上是一个通用的Python问题):
import iso8601
Run Code Online (Sandbox Code Playgroud)
....
date_str="2010-10-30T17:21:12Z"
Run Code Online (Sandbox Code Playgroud)
....
d = iso8601.parse_date(date_str)
foo = app.models.FooModel(the_date=d)
foo.save()
Run Code Online (Sandbox Code Playgroud)
这会导致Django抛出错误:
raise ValueError("MySQL backend does not support timezone-aware datetimes.")
Run Code Online (Sandbox Code Playgroud)
我需要的是:
d = iso8601.parse_date(date_str)
local_d = SOME_FUNCTION(d)
foo = app.models.FooModel(the_date=local_d)
Run Code Online (Sandbox Code Playgroud)
什么会SOME_FUNCTION是什么?
在Play 2.1应用程序中,我将如何以编程方式确定应用程序运行的模式(即开发与生产)?
例如,能够从模板内部执行此类操作会很有用:
<p>@if(__some_play_API_call__ == Dev) { <b>Development mode</b> }</p>
在Play 2.0 API文档中,似乎有一个类的mode属性...但是,我不确定如何获取当前正在运行的应用程序的实例.play.api.Application
是否可以控制在SQLAlchemy的查询方法中查询哪些列,同时仍然返回您要查询的对象的实例(尽管已部分填充)?
或者SQLAlchemy是否有必要执行SELECT *映射到对象?
(我知道查询单个列是可用的,但它不会将结果映射到对象,而只映射到命名元组的组件).
例如,如果User对象具有userid,name,password和bio属性,但您希望查询仅填充它返回的对象的userid和name:
# hypothetical syntax, of course:
for u in session.query(User.columns[userid, name]).all():
print u
Run Code Online (Sandbox Code Playgroud)
会打印:
<User(1, 'bob', None, None)>
<User(2, 'joe', None, None)>
...
Run Code Online (Sandbox Code Playgroud)
这可能吗; 如果是这样,怎么样?
如何安装leiningen插件?
例如,leiningen-run?
我看到这个名为"clojars.org"的东西,以及如何"推"到它,但我没有看到任何关于"拉"的东西.
我需要将一个字符串和一个字符串列表组合成一个元组,这样我就可以将它用作字典键.这将是一个内环,所以速度很重要.
列表将很小(通常为1,但偶尔会有2或3个项目).
最快的方法是什么?
之前:
my_string == "foo"
my_list == ["bar", "baz", "qux", "etc"]
Run Code Online (Sandbox Code Playgroud)
后:
my_tuple == ("foo", "bar", "baz", "qux", "etc")
Run Code Online (Sandbox Code Playgroud)
(注意:my_list不得自行更改).
根据Slick 2.0文档,要获取表中的行数:
val q1 = coffees.length
// compiles to SQL (simplified):
// select count(1) from "COFFEES"
Run Code Online (Sandbox Code Playgroud)
然而,事实证明这coffees.length是类型Column[Int].
如何执行查询并获取值?
我的目标:在金字塔中,调用另一个视图可调用,并在Response不知道有关该视图可调用的任何细节的情况下获取对象.
在我的Pyramid应用程序中,假设我有一个使用view_config装饰器定义的视图"foo":
@view_config(route_name="foo",
renderer="foo.jinja2")
def foo_view(request):
return {"whereami" : "foo!"}
Run Code Online (Sandbox Code Playgroud)
现在说我想将"bar"路由到暂时执行相同操作的视图,因此它在内部调用foo_view并返回其响应:
@view_config(route_name="bar")
def bar_view(request):
return foo_view(request)
Run Code Online (Sandbox Code Playgroud)
...可是等等!这不起作用,因为foo_view它不会返回Response它的渲染器.
所以,这将工作:
@view_config(route_name="bar",
renderer="foo.jinja2")
def bar_view(request):
return foo_view(request)
Run Code Online (Sandbox Code Playgroud)
因为它将应用相同的渲染器foo_view.但这很糟糕,因为我现在必须通过复制渲染器值并且必须知道被调用视图的渲染器来重复自己.
所以,我希望Pyramid中有一些函数允许调用另一个view-callable并在Response不知道或关心渲染对象的情况下获取一个对象:
@view_config(route_name="bar")
def bar_view(request):
response = some_function_that_renders_a_view_callable(foo_view, request)
return response
Run Code Online (Sandbox Code Playgroud)
会some_function_that_renders_a_view_callable是什么?
pyramid.views.render_view似乎按名称搜索视图; 我不想透露姓名.
(注意:返回HTTPFound导致客户端重定向到目标路由是我试图避免的.我想"内部"重定向).