草庐IT

singleton_class

全部标签

ruby - Class 怎么可能属于 Class 类而没有 Class 实例方法呢?

我正在研究Ruby解释器是如何实现的,并且出现了一个问题,但我还没有得到答案。这就是标题中的那个:因为Class(r_cClass)将super设置为自身(忽略元类,因为实际上super是r_cClass的元类),如果我向Class对象发送一个方法,这将在Class的方法表中查找'类(class)。但是Class的类是Class,所以我不应该最终寻找Class的实例方法吗?但事实并非如此,因为在文档中Class类方法和Class实例方法是分开的。在Ruby的eval.c中的search_method中,我没有发现对Class类有什么特别的检查。任何人都可以阐明这一点吗?

ruby - 为什么会.is_a?和 .class 给出相互矛盾的结果?

我有三个属于同一个类的对象。一个是通过Item.new创建的,另外两个是从数据库(Mongoid)中提取的。我将这些对象中的一个/任何一个传递给另一个方法,并通过is_a?检查该方法中的类型:definitialize(item,attrs=nil,options=nil)super(attrs,options)raise'invaliditemobject'unlessitem.is_a?(Item)好吧,这次加薪被击中了。所以我在Rails控制台中检查类、is_a和instance_of。我得到相互矛盾的结果。为什么它们有相同的class但只有其中一个是那个class的instan

ruby - 为什么 inspect for the subclasses of built-in classes 中没有列出实例变量?

当我对内置类进行子类化时,为什么inspect中的行为会发生变化。但是当我子类化一个自定义的时没有看到。classMainErrorendclassAnotherTestErrort=TestError.newputst.inspect#output:# 最佳答案 因为很多(大多数?全部?)内置类是用C语言编写的,并且覆盖#inspect。例如,Exception(StandardError的父类(superclass))定义#inspect如下:exc_inspect(VALUEexc){VALUEstr,klass;klass=

Ruby 类实例方法 def 初始化 : instance or class method?

让我们来看一个普通的ruby​​类:classPersonattr_accessor:namedefinitializename@name=nameendendbob=Person.new("bob")我的问题是初始化的性质。事情是这样的,new显然是一个类方法,但在我看来initialize是一个实例方法(不是类),它在类方法创建的实例上调用new被调用。我有这个权利吗?或者有人可以阐明一些新的观点吗?我做了一些谷歌搜索,但找不到任何清晰度。 最佳答案 当一个新对象被初始化时(也就是说,当你在一个类上调用new时)有效调用的是这个

ruby-on-rails - 旧的 Ruby 错误在我的 Ruby on Rails 应用程序中反复出现,与 Class.create 和 delayed_job 相关

这个错误已经有好几个月了,在这里:http://www.ruby-forum.com/topic/1094002其中显示代码更改的两个链接:https://github.com/godfat/ruby/commit/f4e0e8f781b05c767ad2472a43a4ed0727a75708https://github.com/godfat/ruby/commit/c7a6cf975d88828c2ed27d253f41c480f9b66ad6我有Ruby1.9.2和rvm。我会把这些更改粘贴到适当的文件中,但我不知道如何粘贴。这在几天前就奏效了。我不能像这样执行RubyonRai

ruby - class Class - 实例与类方法

它是如何工作的?运行以下代码时,"hifromclass"会打印两次。ruby内部发生了什么使它表现得像这样?我实际上不是在为类创建实例方法吗classClassdeffooputs"hifromclass"endendClass.foox=Class.newx.foo 最佳答案 我不知道你是否意识到这一点,但是当你执行classClass...end时,你并没有创建一个名为Class,您正在重新打开现有类Class。由于Class是所有类都是其实例的类,这意味着Class是其自身的实例。因此,您可以直接在Class上调用Class

ruby - 类与 Class.new,模块与 Module.new

class之间有什么区别?和Class.new&module和Module.new?我知道:Class.new/Module.new创建一个匿名class/module.当我们第一次将它分配给常量时,它变成了那个class的名称。/module.class/module自动执行此操作。当我们想要继承时,我们可以传递一个参数:Class.new(ancestor).当我们不指定祖先时,它被设置为Object.class使用此语法:classAClass.new返回object.classA返回nil.同样适用于module秒。我错过了什么吗? 最佳答案

ruby - 父类(super class)不匹配、结构、重新加载和 Spork

假设有下面这个类#derp.rbclassDerp当我加载“./derp.rb”两次时,程序因TypeError:superclassmismatchforclassDerp而失败。好的,这可以通过require来管理。但是我如何为每次使用Spork的测试运行重新加载这些类?require显然不会工作,因为它会缓存加载的文件。 最佳答案 Struct.new正在为您的每次加载创建新类。irb(main):001:0>classTest1classTest1'您可以将返回的Struct.newclass保存到一个变量中,然后您可以使用

ruby-on-rails - ArgumentError : Unknown key: :conditions. 有效键是 : :class_name, :class, :foreign_key

在尝试rake:dbmigrate之后,我在终端中得到了这个错误rakeaborted!ArgumentError:Unknownkey::conditions.Validkeysare::class_name,:class,:foreign_key,:validate,:autosave,:table_name,:before_add,:after_add,:before_remove,:after_remove,:extend,:primary_key,:dependent,:as,:through,:source,:source_type,:inverse_of,:counter

ruby - 引发异常 : use instance or class?

我见过使用类引发异常的Ruby代码:raiseGoatException,"Maximumof3goatsperbumpercar."其他代码使用实例:raiseGoatException.new"Noleotardfoundsuitableforgoat."这两个都是以同样的方式获救的。是否有理由使用实例而不是类? 最佳答案 没有区别;在任何一种情况下都会实例化异常类。如果您提供一个字符串,作为new的参数或作为raise的第二个参数,它会被传递给initialize并且将成为异常实例的.message。例如:classGoatE