假设我有一个用户定义的类型,例如type foo = string * string list,如果我想在我的代码中插入打印调试语句以查看它保存的值,那么最快的方法是什么?
let (first, second) = foo in
printf "%s, %s" first (String.concat second)
对于快速而肮脏的调试语句来说,似乎编写
工作太多了!
我在以以下方式执行fork时遇到麻烦,因为子进程返回a Core_kernel.Std.never_returns,而父进程试图返回()。
我得到了错误This expression has type unit but an expression was expected of type Core_kernel.Std.never_returns = Core_kernel.Nothing0.t。似乎找不到使用的正确方法Core.Std。
open Core.Std
open Unix
let () =
let prog = "ls" in
let args = ["ls"; "-l"] in
match Unix.fork () with
| `In_the_child ->
Unix.exec ~prog:prog ~args:args ();
| `In_the_parent _ ->
(* continue on with the program *)
Run Code Online (Sandbox Code Playgroud) 我目前正在运行一个使用以下装饰器的 Python Flask 应用程序:
def login_required(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
if 'phone' in session:
user = User.query.filter_by(phone = session['phone']).first()
if user:
return fn(user, *args, **kwargs)
else:
return redirect(url_for('login'))
return wrapper
Run Code Online (Sandbox Code Playgroud)
我有以下观点:
@app.route('/delete/<eventid>')
@login_required
def delete(eventid):
Run Code Online (Sandbox Code Playgroud)
这是由以下行调用:
url_for('delete', eventid=event.uid)
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
delete() got multiple values for keyword argument 'eventid'
Run Code Online (Sandbox Code Playgroud)
delete() 函数在不使用装饰器时起作用。装饰器在不与 delete() 函数一起使用时工作。
我该如何解决这个问题?