私はcurrent_user
ヘルパーでDeviseを使用するこのアプリケーションを持っています。私がモジュールを作成すると、current_user
は決して起こらないのにそれに帰属すると言いますとnil
になります。Rails ActiveSupport ::問題と方法の評価
class PagesController < ApplicationController
include ModuleTest
def index
a_test_method
end
end
そしてModuleTest:
module ModuleTest
extend ActiveSupport::Concern
def a_test_method
puts "(BEFORE)===========> #{current_user.inspect}"
current_user = nil if false
puts "(AFTER) ===========> #{current_user.inspect}"
end
end
出力:
(BEFORE)===========> #<User id: 1>
(AFTER) ===========> nil
しかし、私は削除した場合/この行# current_user = nil if false
をコメントアウトし、current_user
は有効なまま:
(BEFORE)===========> #<User id: 1>
(AFTER) ===========> #<User id: 1>
これはやや怠惰な評価に関係するでしょうか?文が評価されていない場合
EDIT
は全体の問題は、Rubyは、変数を定義する方法に依存しています:
2.3.4 (main):0 > defined? this_never_seen_variable_before
=> nil
2.3.4 (main):0 > this_never_seen_variable_before = "value" if false
=> nil
2.3.4 (main):0 > defined? this_never_seen_variable_before
=> "local-variable"
2.3.4 (main):0 >
2.3.4 (main):0 > this_never_seen_variable_before_2
NameError: undefined local variable or method `this_never_seen_variable_before_2' for main:Object
from (pry):119:in `<main>'
2.3.4 (main):0 > this_never_seen_variable_before_2 = "value" if false
=> nil
2.3.4 (main):0 > this_never_seen_variable_before_2
=> nil
2.3.4 (main):0 >
の下に、このしくみを教えてください。