Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如果可能,分配变量并在语句中进行测试?_Elixir - Fatal编程技术网

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中为我指明模式匹配和分配。