草庐IT

Ruby:类定义的显式范围

免责声明:代码取自rubykoans这是对类内常量作用域的讨论。下面是几个类的定义:classAnimalLEGS=4deflegs_in_animalLEGSendendclassMyAnimalsLEGS=2classBird此时执行MyAnimals::Bird.new.legs_in_bird结果为2,我明白为什么——在继承层次结构之前搜索常量的词法空间。然后定义这个类:classMyAnimals::Oyster教程说现在调用MyAnimals::Oyster.new.legs_in_oyster结果是4,我无法弄清楚。在我看来,Oyster是MyAnimals中的一个嵌套类

ruby - 如何在单独的类/模块/文件中编写 Thor 任务?

我在获取Thor时遇到了一些问题这样做,所以希望有人能指出我做错了什么。我有一个主类classMyApp我想为多个命名空间分成单独的文件,比如thorcreate:app_type和thorupdate:app_type.我找不到任何示例来说明应该如何将Thor应用程序分解成多个部分,而且我尝试过的方法似乎不起作用。举个例子,这个类我正试图从主Thor类中脱离出来:moduleThingsmoduleGroupingdesc"something","Dosomethingcoolinthisgroup"defsomething....endendend当我尝试在我的主类中包含或要求它时

ruby - 如何确定 Rails 3 模型类中的表名

我想在模型方法中获取表名。我found应该有方法table_name但是当我尝试调用它时我得到NameErrorException:undefinedlocalvariableormethod`table_name'。显然不存在:ppmethods.grep(/^ta.*/)["table_name_prefix?","table_name_suffix?","taint","taguri","taguri=","tainted?","table_name_prefix","table_name_suffix","tap"]如何获得“真实的”表名(无小写-复数技巧)?谢谢

ruby - 在没有 `autoload` 的情况下在 Ruby 中自动加载类

我爱theautoloadfunctionalityofRuby;然而,它是goingawayinfutureversionsofRuby因为它从来都不是线程安全的。所以现在我想假装它已经消失并在没有它的情况下编写我的代码,方法是自己实现延迟加载机制。我想以最简单的方式实现它(我现在不关心线程安全)。Ruby应该允许我们这样做。让我们从扩充一个类开始const_missing:classDummydefself.const_missing(const)puts"const_missing(#{const.inspect})"super(const)endend当我们尝试引用“Dummy

ruby - Ruby 中神秘的数据类是什么?

今天,我无意中发现了Ruby中神秘的Data类,但我找不到任何有用的信息来说明它的作用或它为什么存在。我假设它是语言实现本身的一部分。有人知道它的作用吗?mbp-scott:~scott$irbruby-1.9.3-p0:001>Data=>Dataruby-1.9.3-p0:002>Data.is_a?Module=>trueruby-1.9.3-p0:003>Data.is_a?Class=>trueruby-1.9.3-p0:004>Data.ancestors=>[Data,Object,Kernel,BasicObject]ruby-1.9.3-p0:005>Data.met

ruby - 在一个类中混合 attr_accessor 和初始化方法

我看到这样的代码:classPersondefinitialize(name)@name=nameendend我知道这让我可以做person=Person.new之类的事情,并像其他方法一样在我的类中的其他地方使用@name。然后,我看到了如下代码:classPersonattr_accessor:nameend...person=Person.newperson.name="David"我只是对这两种方法网格不知所措。definitialize(name)的特殊用途是什么?我想attr_accessor允许我读写。这意味着它们是两种不同的方法。是的?想要澄清definitialize

ruby-on-rails - 向 Rails 应用程序中的内置类添加方法

我想向Rails应用程序中的Array类添加一个方法。我应该把这个方法放在哪里?编辑更清楚,显然我把它放在某个文件中,但我如何告诉Rails应用程序在哪里可以找到它? 最佳答案 一种方法是在lib/rails_extensions.rb中创建一个文件。然后,像这样添加您的扩展:classArraydefbring_me_food#...enddefmake_tea#...endendclassHashdefrub_my_shoulders#...endend然后在config/environment.rb中添加:require'ra

ruby - 在 Ruby 中打印一个类的所有方法名?

这个问题在这里已经有了答案:Getlistofaclass'instancemethods(8个答案)关闭3年前。如果我想列出一个类的所有方法,我可以使用Class_Name.methods,例如,列出FixNum类中的所有方法:>5.methods=>[:to_s,:-@,:+,:-,:*,:/,:div,:%,:modulo,:divmod,:fdiv,:**,:abs,:magnitude,:==,:===,:,:>,:>=,:>,:to_f,:size,:zero?,:odd?,:even?,:succ,:integer?,:upto,:downto,:times,:next,

Ruby 类对象垃圾回收

在ruby​​中,所有类都是类Class的对象。由于类也是对象,RubyVM是否对类对象遵循相同的垃圾收集策略?是什么决定了一个类对象对于垃圾回收是安全的? 最佳答案 一个更具体的例子,类似于AndrewCholakian的回答是使用ObjectSpace。例如:2.1.1:001>ObjectSpace.count_objects[:T_CLASS]=>8842.1.1:002>10000.times{Class.new}=>100002.1.1:003>ObjectSpace.count_objects[:T_CLASS]=>2

ruby-on-rails - 使用 STI 时如何将 ActiveRecord 对象转换为另一个类?

我目前正在使用ActiveRecord单表继承。如何将我的一个模型从类型A转换为类型B?他们有相同的parent。 最佳答案 #becomes是您要查找的内容:http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-becomes 关于ruby-on-rails-使用STI时如何将ActiveRecord对象转换为另一个类?,我们在StackOverflow上找到一个类似的问题: