Различия в поведении instance_eval между Ruby 1.9.1 и 1.8.6?

StackOverflow https://stackoverflow.com/questions/1228032

  •  22-07-2019
  •  | 
  •  

Вопрос

Я заметил, что переменные класса @@ my_class var теперь ищутся в контексте объекта instance_eval'd в Ruby 1.9.1, тогда как в Ruby 1.8.6 это было не так.

Каковы некоторые другие различия в поведении instance_eval для Ruby 1.9.1?

Это было полезно?

Решение

Я не могу перечислить их все, но я знаю, что в постоянном поиске есть некоторые изменения. В 1.8 постоянный поиск находился в области действия вызывающих, а в блоках - в 1.9.

FOO = "hi"

class Something
  FOO = "bye"

  def self.handle(&block)
    instance_eval(&block)
  end
end

p Something.handle { FOO }
# "hi" on 1.8, "bye" on 1.9

Другие советы

Я думаю, что [по крайней мере в настоящее время] тоже не возвращает себя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top