Tag: 动态

如何在Ruby中动态打开方法

我想动态打开一个方法并根据输入字段返回一个值。 我试着用这里的例子来问我想要什么。 如果我能成功这个例子,我会做我想做的事。 假设我有一个名为Greetings的类,它有一个名为greet()的方法,它将消息作为参数。 class Greetings def self.greet(message) return “good morning” if message==”gm” return “evening” if message==”ge” return “good afternoon” if message==”ga” end end 当我做Greetings.greet(“ge”) ,我得到“晚上”作为输出。 我想改变这种行为而不改变上面的Greetings类(显而易见的原因是它是一个外部库)。 我的问题很简单。 当我打电话给Greetings.greet(“ge”)时,我应该怎么做才能给我回复“A Very Good Evening”,对于所有其他输入,它应该返回原始类返回的内容。 我知道在Ruby中动态打开一个类但是如何将该方法委托给其他情况的父类? 我会在config / initializers文件夹中写这个,因为我正在使用Rails。

Ruby + Cucumber:如何在代码中执行黄瓜?

我想从Ruby代码中执行Cucumberfunction。 通常,与gem一起安装的cucumber二进制文件在命令行上执行,并指定一个或多个function。 但是,我想定义创建动态function执行流程的逻辑。 换句话说,程序可以确定应该执行哪些function。 是否可以使用Ruby代码中的指定function文件来实例化Cucumber而不是命令行?

在类delcaration之后设置类inheritance或在const_set类上设置类inheritance

如果先前已经定义了一个类,我怎么能告诉它inheritance一个Parent类 例如: class Parent .. end class Klass .. end 现在我希望它inheritance自Parent 我无法重新打开课程并设置它,因为我会收到课程不匹配错误 class Klass < Parent .. end 具体来说,我试图找出如何在通过Object.const_set创建的类上设置类inheritance klass = Object.const_set(‘Klass’, Class.new) 如何告诉Klass从类Parentinheritance?

动态创建方法中的Ruby动态参数

我有以下几种方法定义: method_name = :foo method_arguments = [:bar, :baz] method_mandatory_arguments = {:quux => true} method_body = ->{ quux ? bar + baz : bar – baz } 所以我想得到一个真正的方法。 但是define_method没有任何动态定义方法参数的可能性。 我知道另一种使用class_eval的方法,但我知道用class_eval定义方法比使用define_method慢得多。 我怎么能有效地存档这个? 我在rails控制台中做了一些基准测试: class Foo; end n = 100_000 Benchmark.bm do |x| x.report(‘define_method’) do n.times { |i| Foo.send(:define_method, “method1#{i}”, Proc.new { |a, b, c| a + b […]

列出Mongoid模型中的动态属性

我已经阅读了文档,我找不到具体的方法来解决这个问题。 我已经为模型添加了一些动态属性,我希望能够遍历所有这些属性。 所以,举一个具体的例子: class Order include Mongoid::Document field :status, type: String, default: “pending” end 然后我做以下事情: Order.new(status: “processed”, internal_id: “1111”) 后来我想回来并且能够获得所有动态属性的列表/数组(在这种情况下,“internal_id”就是它)。 我还在挖,但我很想听听其他人是否已经解决了这个问题。

动态生成一个`link_to`到控制器动作`edit`

我正在使用Ruby on Rails 3.0.7,我想动态生成一个link_to到控制器动作edit 。 我必须在部分模板中使用它,但问题是我为不同的模型数据渲染相同的部分模板(也就是说,我传递不同类实例的局部变量)。 所以我不能使用路线“神奇的RoR方式” `edit__path()`. 我想做类似以下的事情: link_to( @resource_class_instance, :action => ‘edit’) # This example is wrong, but it suggests the idea 可能吗? 如果是这样,我该怎么办?

动态创建一个类

我正在尝试创建一个新类,不知道该类的名称,直到它应该创建。 像这样的东西; variable = “ValidClassName” class variable end Test = ValidClassName.new 如果可能的话,我也会欣赏有关如何动态地向这个新类添加属性(和方法)的提示。 我将为课程检索“设置”,它们看起来像这样: title :Person attribute :name, String attribute :age, Fixnum 但是不应该只接受那个显式文件,属性可能在数字结尾类型上有所不同。 最终会生成一个看起来像这样的类: class Person def initialize(name, age) @name_out = name @age_out = age end end 救命?

Ruby – 动态地向类添加属性(在运行时)

我正在寻找一种方法在运行时向我已经定义的类添加属性,或者更好: class Client attr_accessor :login, :password def initialize args = {} self.login = args[:login] self.password = args[:password] end end 但是,我有这个哈希 {:swift_bic=>”XXXX”, :account_name=>”XXXX”, :id=>”123″, :iban=>”XXXX”} 我希望这个哈希成为我的客户端实例的一部分 client = Client.new :login => ‘user’, :password => ‘xxxxx’ 然后带着神奇的魔力 client @@%$%PLIM!!! {:swift_bic=>”XXXX”, :account_name=>”XXXX”, :id=>”123″, :iban=>”XXXX”} 我可以访问 client.swift_bic => ‘XXXX’ client.account_name => ‘XXXX’ client.id => 123 我还想保持一个适当的对象结构,如: Client.new(:login => ‘user’, […]

Ruby动态类。 如何修复“警告:来自toplevel的类变量访问”

我正在尝试编写一个程序,根据从文件中读取的配置动态定义ruby类。 我知道我可以使用Class.new来做到这一点。 这是一个示例程序: x = [1,2,3] Test = Class.new do @@mylist = x def foo puts @@mylist end end Test.new.foo 当我运行它时,我得到以下输出(与ruby 1.9.3p0一起运行): c:/utils/test.rb:4:警告:来自toplevel的类变量访问 c:/utils/test.rb:7:警告:来自toplevel的类变量访问 1 2 3 有谁知道导致这些警告的原因以及如何摆脱这些警告? 我已经尝试更换线路了 @@mylist = x 有了这个 class_variable_set(:@@mylist, x) 但是当我这样做时,我得到了这个错误: c:/utils/test.rb:7:警告:来自toplevel的类变量访问 c:/utils/test.rb:7:在`foo’中:未初始化的类变量@@ mylist in Object(NameError) 来自c:/utils/test.rb:11:in” 提前致谢!