Elixir 如果可能,分配变量并在语句中进行测试?
请看以下代码:Elixir 如果可能,分配变量并在语句中进行测试?,elixir,Elixir,请看以下代码: current_user = Plug.Conn.get_session(conn, :current_user) unless current_user == nil do Logger.info "User #{current_user.id} logged out" end 这个代码很有效,但我觉得它不像长生不老药。来自C,我习惯了这样的事情: if ((current_user = get_session("current_user"
current_user = Plug.Conn.get_session(conn, :current_user)
unless current_user == nil do
Logger.info "User #{current_user.id} logged out"
end
这个代码很有效,但我觉得它不像长生不老药。来自C,我习惯了这样的事情:
if ((current_user = get_session("current_user")) != NULL) {
log("User %d logged out, current_user->id);
}
因此,在同一行中分配和测试。这在长生不老药中可能吗?
我做错了吗?在谷歌上搜索,我觉得我应该总是避免使用Elixir中的if语句,因为总有一种更好、更实用的方法 是的,您可以在Elixir中的同一行中指定和测试:
if current_user = Plug.Conn.get_session(conn, :current_user) do
Logger.info "User #{current_user.id} logged out"
end
如果您需要If/else语句,另一种不用在测试期间赋值而使用Elixir的方法是使用case
:
case Plug.Conn.get_session(conn, :current_user) do
nil ->
# Handle user is not present
current_user ->
# Handle user is present
end
(上述逻辑记录当会话中出现
当前用户时,该用户已注销,这可能看起来令人困惑,但根据问题中的代码,这是预期行为)是的,您可以在Elixir中的同一行中分配和测试:
if current_user = Plug.Conn.get_session(conn, :current_user) do
Logger.info "User #{current_user.id} logged out"
end
如果您需要If/else语句,另一种不用在测试期间赋值而使用Elixir的方法是使用case
:
case Plug.Conn.get_session(conn, :current_user) do
nil ->
# Handle user is not present
current_user ->
# Handle user is present
end
(上面的逻辑记录了当会话中出现当前用户时,该用户已注销,这可能看起来令人困惑,但根据问题中的代码,这是预期的行为)有一条经验法则:如果您使用if
,则出现问题。很少有情况下,如果
在长生不老药中处于正确的位置
正如@navinpeiris指出的,您可以在这里使用case
,但我个人会同意。一旦你习惯了,它真的很方便:
with %User{} = current_user <- Plug.Conn.get_session(conn, :current_user) do
Logger.info "User #{current_user.id} logged out"
end
对于%User{}=current_User有一条经验法则:如果您使用的是if
,则会出现问题。很少有情况下,如果
在长生不老药中处于正确的位置
正如@navinpeiris指出的,您可以在这里使用case
,但我个人会同意。一旦你习惯了,它真的很方便:
with %User{} = current_user <- Plug.Conn.get_session(conn, :current_user) do
Logger.info "User #{current_user.id} logged out"
end
with%User{}=current\u User是原始代码后面跟着put\u会话(:current\u User,nil)
和重定向。是原始代码后面跟着put\u会话(:current\u User,nil)
和重定向。感谢您在/1中为我指明模式匹配和分配。感谢您在/1中为我指明模式匹配和分配。