Tag: reflection

Ruby on Rails – 使用符号数组获取对象关联值

例如,有模型: class Activity < ActiveRecord::Base belongs_to :event end class Event < ActiveRecord::Base has_many :activities attr_accessible :foo end 我可以通过使用activity.event.foo(足够简单)来获取活动的事件foo。 但是我想创建一个generics函数,首先找出一个对象是否有belongs_to关联,然后通过belongs_to关联获取该对象的foo(假设所有对象都通过belongs_to关联有foo)? 到目前为止,我有以下内容给我一个反思: def get_foo(object) object.class.reflect_on_all_associations(:belongs_to).each do |belongs_to| return object.?????? end end 我可以通过belongs_to.klass(例如[Event])获取reflection类名的数组,或者通过belongs_to.name(例如[:event])获取belongs_to关联的符号数组。 考虑到从reflection中得到的东西,我如何获得对象的belongs_to的foo? 没有使用reflection,有没有更简单的方法来做到这一点? 我希望这很简单,我只想说明如何解决这个问题。 我也希望我有点清楚。 这是我的第一个Stack Overflow问题。

Ruby中是否有一种方法可以打印出Object的公共方法

…不包括通用Object的所有公共方法? 我的意思是,除了做数组减法。 我只是想快速回顾一下对象有时可以使用的内容,而无需访问文档。

有没有更好的方法来获取Ruby对象的公共“属性”?

有没有更好的方法来获取Ruby对象的公共“属性”? def props self.public_methods.grep(/.=$/) – [“==”,”===”] end

需要帮助“Ruby编程语言”中的reflection示例

在这个来自Ruby Programming Language (p.270)的instance_eval ,我很困惑为什么示例代码最后一行的instance_eval方法定义了一个名为String.empty 的类方法 。 如果要定义实例方法,是否不要使用class_eval定义类方法和instance_eval ? o.instance_eval(“@x”) # Return the value of o’s instance variable @x # Define an instance method len of String to return string length String.class_eval(“def len; size; end”) # Here’s another way to do that # The quoted code behaves just as if it was inside “class String” […]

从Ruby中的方法中检索Method实例

这是如何确定方法定义的类的后续问题? (希望你不介意相似之处) 给定一个类层次结构,方法可以检索自己的Method实例吗? class A def foo puts “A#foo: `I am #{method(__method__)}'” end end class B < A def foo puts "B#foo: `I am #{method(__method__)}'" super end end A.new.foo # A#foo: `I am #’ B.new.foo # B#foo: `I am #’ # A#foo: `I am #’ # <- A#foo retrieves B#foo 所以B.new.foo反而打印 # B#foo: `I am […]

变量如何绑定到define_method的主体?

在尝试提高我的Ruby技能时,我一直在讨论这个案例,我只能通过阅读API文档找不到解释。 非常感谢您的解释。 这是示例代码: for name in [ :new, :create, :destroy ] define_method(“test_#{name}”) do puts name end end 我希望/期望发生的是name变量将绑定到给定于define_method的块,并且当#test_new时它将输出“new”。 而是每个定义的方法输出“destroy” – 分配给name变量的最后一个值。 我对define_method及其块有什么误解? 谢谢!

当你说Ruby是反思的时候,这主要是指“鸭子打字”吗?

我正在阅读描述Ruby的文本,它说: Ruby被认为是一种“反思”语言,因为Ruby程序可以分析自身(就其构成而言),调整其工作方式,甚至用其他代码覆盖自己的代码。 我对这个术语“反思”感到困惑 – 这主要是谈论Ruby可以查看变量并弄清楚它是Integer还是String(duck typing)的方式,例如: x = 3 x = “three” # Ruby reassigns x to a String type

从Ruby块中提取AST

是否可以从Ruby本身获取块的AST? 我已经看过ParseTree和ruby_parser,但他们似乎都对Ruby 1.9.2有粗略的支持(从我读过的内容)。 我需要一些适合1.9.2的东西。

如何确定一个方法定义的类?

我想动态确定当前方法定义的类。 这是我正在尝试做的一个静态示例: class A def foo puts “I was defined in A” end end class B < A def foo puts "I was defined in B" super end end A.new.foo # I was defined in A B.new.foo # I was defined in B # I was defined in A <- this is the tricky one […]

从irb获取所有局部变量或可用方法?

当我进入irb并输入一个不存在的命令时,我得到一个错误说明 “undefined local variable or method ‘my_method’ for main:Object (NameError)” 有没有办法获得可用的局部变量或方法的列表? 这对于探索ruby非常有用。