سؤال

أحاول استخدام بحث جوجل مكتبة روبي (يتبع الكود) لكنها تشكو من ذلك "cattr_accessor هل طريقة غير محددة " - أي أفكار لماذا قد يكون هذا أو كيف يمكنني إصلاحها؟

require 'rubygems'
require 'google_search'

GoogleSearch.web :q => "pink floyd"
هل كانت مفيدة؟

المحلول

cattr_accessor يبدو أن تمديد القضبان هذا مثل attr_accessor, ، ولكن يمكن الوصول إليه على كل من الفصل وحالاته.

إذا كنت تريد نسخ مصدر cattr_accessor الطريقة ، تحقق من هذه الوثائق:

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 46
def cattr_accessor(*syms)
  cattr_reader(*syms)
  cattr_writer(*syms)
end

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 4
def cattr_reader(*syms)
  syms.flatten.each do |sym|
    next if sym.is_a?(Hash)
    class_eval("unless defined? @@\#{sym}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}\n@@\#{sym}\nend\n\ndef \#{sym}\n@@\#{sym}\nend\n", __FILE__, __LINE__)
  end
end

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 24
def cattr_writer(*syms)
  options = syms.extract_options!
  syms.flatten.each do |sym|
    class_eval("unless defined? @@\#{sym}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}=(obj)\n@@\#{sym} = obj\nend\n\n\#{\"\ndef \#{sym}=(obj)\n@@\#{sym} = obj\nend\n\" unless options[:instance_writer] == false }\n", __FILE__, __LINE__)
  end
end

نصائح أخرى

يمكنك الحصول على هذه الوظيفة من خلال تضمين جوهرة Ruby Hacets. الرجوع إلى المصدر هنا:

https://github.com/rubyworks/facets/blob/master/lib/core/facets/cattr.rb

لا تحتاج عمومًا إلى طلب جميع الكود من الجوهرة. يمكنك أن تتطلب بشكل انتقائي ما تريد. هناك عدد غير قليل من الامتدادات المفيدة في الأحجار الكريمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top