草庐IT

ruby:如何获取作为模块子对象的所有类和/或模块对象?

假设我有以下内容:moduleAclassB#...end#...end假设我有几个这样的不同文件,具有不同的B值,但都在同一个模块(A)中。从一个require的文件然后require的每个文件中,是否有自省(introspection)/反射(reflection)的方法(这些是不同的东西吗?我很模糊关于区别,如果是的话)来确定(并获取对象)模块中的每个类?我试过这个,这让我有点接近:A.constants#=>["B"]但我更愿意返回[A::B],而不是字符串,这样我就可以在其上调用类似singleton_methods的东西,它对我的程序很有用,它试图将数据映射到对各种子类方法

ruby - 为什么可以在没有父类实例的情况下调用某些类和/或方法?

我在CodeAcademy的Ruby类(class)快要结束了,我对一件奇怪的事情很好奇:我的印象是类是常量、方法等的存储库……而在为了访问它们中的大多数,您首先需要创建该类的实例,或者在某些情况下可以调用它们自身的方法(因为它们在技术上都是全局对象的一部分)。然后我看到了这样的东西:#WorkedTime.now我将此理解为正在调用类[Time]实例的方法[now]。然后我尝试自己调用该方法:#Failednow那失败了,我假设虽然可以在一般范围内创建方法[作为全局对象的一部分],但如果它依赖于“父”类的初始化变量,则不能单独调用它,因为它不知道要在哪个对象中搜索那些已初始化的变量。

Ruby、类和继承

我需要帮助来理解继承。classMyArray[1,2,3]b=MyArray[4,5]#=>[4,5]c=a+b#=>[1,2,3,4,5]a.class#=>MyArrayb.class#=>MyArrayc.class#=>Array我不明白为什么相加的结果不是MyArray类的实例。 最佳答案 Idon'tunderstandwhymyarray"a"isnot"MyArray"classafteradd.为什么要它(是一个MyArray)?数组的串联操作被定义为返回一个新的Array,所以这就是这里发生的事情。https:

Ruby:元类和类变量

我一直在看一些文章说classvariablesarebadinRuby.他们建议使用元类(或单例类)。这是我的示例代码classJoeclass我知道foo和foo2本质上是一样的,尽管无法将attr_accesor与foo2一起使用。我不明白class是怎么回事.是否发生了某种串联,或者......它是什么?这是某种扩展、继承或猴子修补吗?编辑(奖励):我在这里,有没有办法在View助手上缓存数据?我试过使用这个类 最佳答案 classsyntax代表“在foo类的定义中”。所以如果你这样做:classFooclass这类似于c

ruby - 在一个类和它的某个祖先之间定义的实例方法

假设类A是类B的后代。获取B中定义的A的所有实例方法的列表(符号数组,顺序无关紧要)的最佳方法是什么,即A的实例方法是在B或其任何子类上定义的吗?示例如下。其中类层次结构如下:classC;defc;endendclassBA在各种类中的实例方法是:A.instance_methods_within(Kernel)#=>(SameasA.instance_methods)A.instance_methods_within(C)#=>[:a,:d,:b,:c]A.instance_methods_within(B)#=>[:a,:d,:b]A.instance_methods_withi

ruby-on-rails - 如何在 Rails 模型中创建多个类和实例方法

我在做这个defself.a...enddefaclass.aend但是对于几种方法,我将不得不复制实例方法。我在一个模块里思考moduleAdefa;endend然后像这样在我的模型中使用它:extendAincludeA但我不确定根据Rails文件夹结构将它放在哪里,甚至不确定是否将模块放入我的模型中。有什么建议吗? 最佳答案 选项1-扩展self如果您希望所有实例方法也作为类方法,您可以简单地使用extendselfclassAdeffoo...enddefbar...endextendselfend这将允许您将foo称为A.

C++类和对象基础知识详解

1.对象(object)1.一切皆是对象。如下图:·女人是一个对象·鞋子是一个对象·包包是一个对象·衣服是一个对象·裤子是一个对象·手链是一个对象…2.对象由对象组成.这里人这个对象,由鞋子、包包、衣服、裤子、手链等对象组成。3.每个对象都有:a)数据(描述对象的属性)b)函数(行为操作代码)2.类(class)·具有相同属性和行为的对象,我们可以把它抽象为类。·类是对象的抽象·对象是类的特例.3.面向对象的程序设计(OOP)·面向过程的程序设计(Processorientedprogramming)在面向过程时,我们重点围绕功能,用一个函数去实现一个功能。·面向对象的程序设计(Objecto

ruby - 类、模块、它们的特征类和方法查找

让我们打开类Module并向其添加一个方法:classModuledeffooputs"phew"endend我可以通过这样做来调用这个方法,Class.foo这是可以理解的,因为Class的类是Class,它的父类(superclass)是Module。因此它可以调用Module中定义的实例方法。现在,下面的方法bar是在Module的特征类上定义的:classModuledefself.barputs"bar"endend但是现在Class.bar也有效。谁能给我解释一下Class如何访问Module的特征类中的方法?我想我现在明白了。方法查找并不像我之前解释的那样工作。当我执行C

ruby - 如何避免类和全局变量

Rubocop确认TheRubyStyleGuide.它不鼓励使用实例变量以外的任何东西。我发现至少不使用类变量会让人感到困惑。风格指南中的这段代码对全局变量的使用表示不满,而是推荐使用模块实例变量:#bad$foo_bar=1#goodmoduleFooclass谨慎使用全局变量是有道理的,但既不使用全局变量也不使用类变量让我大吃一惊。模块实例变量和类实例变量,哪个内存使用效率更高?例如:选项A(类实例变量):#thingsthatexistonlywithlifemoduleLife#aninstanceoflifewithuniqueactions/attributesclass

ruby-on-rails - 在 Rails 中发送电子邮件后存储邮件程序类和方法

我正致力于创建一个数据库支持的电子邮件审计系统,以便我可以跟踪电子邮件信息。棘手的部分是我希望能够通过邮件程序类来组织这些,并且还能够存储邮件程序方法的名称。创建邮件程序拦截器或观察器以从Mail::Message实例收集数据并不难,但我很好奇是否有办法捕获创建的类和方法名称该消息的实例。如果可能的话,我宁愿不使用回调。有什么想法吗? 最佳答案 这就是我最终要做的……我希望得到一些关于这样做的利弊的反馈。对我来说感觉有点丑陋,但这很容易。基本上,我在我的邮件程序中加入了使用回调的功能,将类和方法名称元数据附加到Mail::Messa