什么是(大多数)惯用的Clojure表示no-op?也就是说,
(def r (ref {}))
...
(let [der @r]
(match [(:a der) (:b der)]
[nil nil] (do (fill-in-a) (fill-in-b))
[_ nil] (fill-in-b)
[nil _] (fill-in-a)
[_ _] ????))
Run Code Online (Sandbox Code Playgroud)
Python有pass.我应该在Clojure中使用什么?
ETA:我主要是因为我遇到过cond没有提供任何导致错误的地方(例如).我意识到"大多数"时间,相当于pass不需要,但是当它出现时,我想知道什么是最具有Clojuric的.
我有一个类型方法,可以改变类型的字段.它不需要参数,也不会返回任何参数 该方法的大部分是一个switch块.我希望能够通过无操作"短路"出switch块.在我将它重构为类型方法之前,我只是退出了函数,但那就是了.删除案例会破坏方法的逻辑 - default案例会改变状态,如果这种情况匹配,我不想这样做.pass基本上我需要相当于Python的.
码:
func (parser *Parser) endSectionName () {
state = parser.State
buffer = parser.buffer
results = parser.results
switch {
case state.HasFlag(IN_ESCAPED) {
// ???
}
case !inSection(state) {
return state, NotInSectionError
}
case !state.HasFlag(IN_SECTION_NAME) {
state.Reset()
return state, errors.New("Parsing error: Not in section name")
}
default {
state.RemoveFlag(IN_SECTION_NAME)
s := buffer.String()
results[s] = new(Section)
buffer.Reset()
return state, nil
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在为一些使用SQLAlchemy的代码编写一些单元测试.我想测试filter调用,但似乎BinaryExpression使用相同参数创建的SQLAlchemy 对象不能比较相等:
AssertionError: Expected call: filter(<sqlalchemy.sql.elements.BinaryExpression object at 0x1037607d0>)
Actual call: filter(<sqlalchemy.sql.elements.BinaryExpression object at 0x1037590d0>)
Run Code Online (Sandbox Code Playgroud)
我想我可以将它们都转换为字符串并进行比较,但这看起来很糟糕,而且如果我不需要,我真的不会被迫尝试调试字符串比较.是否有更好/更结构化的方法来比较单位测试中的BinaryExpressions?
我们有一个 RESTful(-ish)扭曲的应用程序,它使用 txpostgres 来访问 postgres 数据库。txpostgres.Connection目前,每次客户端 ping 服务器进行数据库调用时,我们都会生成新实例。这是低效的,会导致我们的数据库很快就不堪重负。我一直在尝试改用它来代替使用txpostgres.ConnectionPool,但遇到了麻烦。现在我有一些看起来像这样的东西:
class DBTester(object):
def __init__(self):
self.cfg = load_config('local') # load the db settings from a JSON file
self.pool = ConnectionPool(None, min=1, **self.cfg) # create the pool
@defer.inlineCallbacks
def get_pool(self):
yield self.pool.start()
defer.returnValue(self.pool)
class DBT(object):
def __init__(self):
self.db = DBTester()
@defer.inlineCallbacks
def t(self):
conn = yield self.db.get_pool()
res = yield conn.runQuery('select * from clients')
println('DBT.t result: {}'.format(res))
if __name__ == "__main__":
dbt = DBT()
dbt.t()
dbt.t()
reactor.run()
Run Code Online (Sandbox Code Playgroud)
问题在于pool.start()通话的时间。如果我把它放进去 …