簡體   English   中英

當你在一個不是類的東西上運行class_eval時會發生什么?

[英]What happens when you run class_eval on something that's not a class?

test = "a"
test.class_eval do
  # what is going on here???
end

的ActiveSupport增加class_eval到對象,因此它可以在任何可以使用,而不僅僅是類。

在您的示例中,它的作用相當於:

test = "a"
class << test
  # do stuff
end

Rails 2.3的實際實現如下: http//github.com/rails/rails/blob/2-3-stable/activesupport/lib/active_support/core_ext/object/singleton_class.rb

好吧,在我的計算機上,你得到NoM​​ethodError,因為String類沒有class_eval方法:)

我認為在香草Ruby中,這是非法的。 例如,如果您在irb中嘗試它,您將獲得NoMethodError。

在rails控制台中,可能會添加額外的方法,因為字符串的行為類似於類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM