Closed kazuminn closed 3 years ago
requireされた時点ではnewされてないです。 names_indexは変数じゃなくてメソッドだってとこが肝かな
require 'gemoji'
Emoji.instance_eval{@names_index} #=> nil
Emoji.instance_eval{names_index}
Emoji.instance_eval{@names_index} #=> hashになってる
names_indexメソッドの初回呼び出し時に作られてますね
names_index → all → parse_data_file → self.create → edit_emoji の順で呼び出されて@names_index ||= Hash.new されてる
実際のコードとはとは違うけど、シンプルに書くとこんな感じの事ですね↓
def names_index
unless @names_index
#このunlessの中はnames_indexメソッドを1回目に呼んだ時しか実行されない
@names_index = {}
ファイル開いて読んだりいろいろ初期化処理
end
return @names_index
end
names_index[:key]#ここで初期化処理実行される
names_index[:key]#2回目以降は初期化処理はされない
今gemoji gemを読んでいます。 https://github.com/github/gemoji
恐らく、一般的なgemの挙動?がわからないのが原因で、 gemoji gemの挙動がわからなくて投稿させてもらいました。
とすると、 lib/emoji.rb の50行目のname_index(hash object)は、 require 'gemoji' された時点でnewされ、 hashにjpgがrestoreされるのでしょうか?
されるなら、どんな挙動でしょうか?