Tag: 方法

在Ruby中识别方法的#约定的基本原理/历史是什么?

例如,我总是看到称为String#split ,但从来没有看过String.split ,这似乎更符合逻辑。 或者甚至可能是String::split ,因为你可以认为#split在String的命名空间中。 当假定/隐含类( #split )时,我甚至独自看过这个方法。 我知道这是在ri中识别方法的方式。 哪个先来? 这是区分,例如,来自字段的方法? 我也听说这有助于区分实例方法和类方法。 但这是从哪里开始的?

Ruby的方法解绑机制有什么意义?

Method#unbind UnboundMethod返回对该方法的UnboundMethod引用,该引用稍后可以使用UnboundMethod#bind绑定到另一个对象。 class Foo attr_reader :baz def initialize(baz) @baz = baz end end class Bar def initialize(baz) @baz = baz end end f = Foo.new(:test1) g = Foo.new(:test2) h = Bar.new(:test3) f.method(:baz).unbind.bind(g).call # => :test2 f.method(:baz).unbind.bind(h).call # => TypeError: bind argument must be an instance of Foo 最初,我认为这非常棒,因为我预计它的工作方式与JavaScript的Function.prototype.call() / Function.prototype.apply()类似。 但是,要将方法绑定到的对象必须属于同一个类 。 我能想到的唯一应用是,如果解除绑定方法,丢失原始实现(重新定义原始或单例类中的方法),然后重新绑定并调用它。

Ruby包含模块中模块的单一方法

我有一个以下模块 module SimpleTask def task1 end def task2 end def task3 end end 我有一个模型只需要模块SimpleTask task2方法。 我知道在我的模型中include SimpleTask可以完成这项工作。 但我想知道我是否只能在我的模型中包含特定的task2方法。

从Rake文件中的任务调用方法

可以调用与任务相同的rake文件中的方法吗? 在下面的代码中,您可以看到我有方法调用get_search_url,它将被分配给url。 namespace :populate do desc “ETC” task :db => :environment do Report.where(link: “”).each do |word| url = get_search_url(word.name) doc = Nokogiri::HTML(open(url)) word.update_columns(link: link) end end def get_search_url(keyword) return “URL/keyword” end end

ActionMailer最佳实践:模型或控制器中的调用方法?

通常在对模型执行操作后调用发送电子邮件,但电子邮件本身是查看操作。 我正在寻找你如何思考哪些问题要问自己确定动作邮件方法调用的位置。 我见过/使用过它们: 在模型方法中 – 相关但单独关注的错误耦合? 在模型的回调中(例如after_save) – 就我目前的知识水平而言,最好的分离。 在控制器操作中 – 只是感觉不对,但有没有情况这是构建代码的最明智的方法? 如果我想知道如何编程我需要像程序员一样思考,那么学习如何通过特定的编程解决方案进行思考就值得花几个月独立编码。 谢谢!

获取块参数的数量

我需要获取给定块所需的参数数量。 例如: foobar(1,2,3) { |a, b, c| } def foobar(x, y, z, &block) # need to obtain number of arguments in block # which would be 3 in this example end 这可以在1.9主干中使用,但不能在任何正式版本中使用。 我希望如果有任何方法可以做到这一点,而无需下载单独的gem /扩展模块。

如何在Ruby中正确链接自定义方法?

我正在尝试为以下两种方法执行链接方法。 运行此代码后,我不断获得以下输出: #% 我的问题是:在Ruby中链接方法的正确方法是什么? 这是我的代码: class SimpleMath def add(a,b=0) a + b return self end def subtract(a,b=0) a – b return self end end newNumber = SimpleMath.new() print newNumber.add(2,3).add(2)

Ruby Metaprogramming方法列表?

刚开始学习Ruby元编程。 看看Object.methods我得到: Object.methods => [ :allocate, :new, :superclass, :freeze, :===, :==, :, :<, :, :>=, :to_s, :included_modules, :include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, :instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, :singleton_class, […]

未定义的方法add_to_base

我正在使用activemerchant并且在validation卡在轨道3中是否正常时它会引发我的错误? 先谢谢你们所有人的力量 belongs_to :reservation attr_accessor :card_number, :card_verification validate :validate_card, :on => :create def validate_card unless credit_card.valid? credit_card.errors.full_messages.each do |message| errors.add_to_base “error” end end end def credit_card @credit_card ||= ActiveMerchant::Billing::CreditCard.new( :type => card_type, :number => card_number, :verification_value => card_verification, :month => card_expires_on.month, :year => card_expires_on.year, :first_name => first_name, :last_name => last_name ) end 它指向Undefined method add_to_base

烘干岩纸剪刀

我是一个新手ruby程序员,虽然这段代码有效,但我想知道如何改进它。 我对lambdas和procs等知识非常有限,但任何建议都会很棒。 有没有办法在每种情况下简化if else语句? 另外,是否有任何替代方法可以跳过case语句,而不是将几乎整个代码作为else if语句? def rps(roll) roll_ops = [“rock”, “paper”, “scissors”] pick = roll_ops.sample result = nil if roll == pick result = “tie” else case roll when “scissors” then if pick == “paper” result = “win” else result = “lose” end when “rock” then if pick == “scissors” result = “win” else […]