استخدام في العالم الحقيقي للكائنات ملزمة في روبي

StackOverflow https://stackoverflow.com/questions/1605774

  •  05-07-2019
  •  | 
  •  

سؤال

والليلة الماضية، كنت أفكر في ما أعتقد هي ميزات متقدمة لغة روبي، وهي الإستمرار (callcc) والأشياء ملزم. أعني متقدمين لأن لدي س س كتبته بشكل ثابت langages الخلفية (C #، جافا، C ++)، اكتشفت روبي مؤخرا جدا، لذلك هذه الميزات اللغة ليست مألوفة جدا بالنسبة لي.

وأنا أتساءل ما يمكن أن يكون استخدام في العالم الحقيقي من هذه الميزات langages. في تجربتي، ويمكن أن يتم كل شيء مع langages س س كتبته بشكل ثابت، لكنني توافق على عدم بذكاء جدا في بعض الأحيان. أعتقد أنني أحسب الجمال / الفائدة من استمرار قراءة هذا المقال لطيفة من سام روبي: <لأ href = "http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons" يختلط = "noreferrer"> http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons

ومع ذلك، أنا فقدت مع كائن ربط. يمكن للشخص تقدم لي مع بعض الأمثلة في العالم الحقيقي للشيء الذي يمكن القيام به بذكاء مع ربط الكائن ولكن ليس جدا بذكاء مع langages في عداد المفقودين مفهوم ربط روبي؟

وكنت أفكر في rollbacking بعض الكائنات إلى حالته الأولية عندما سارت الامور بشكل سيء خلال عملية رونينغ طويلة، ولكن لست متأكدا من هذا يمكن تنفيذها مع كائن ربط وأعتقد يمكن تنفيذها بذكاء تماما من استنساخ كائنات قبل تجهيز واستبدال كائن تم تعديلها مع الحيوانات المستنسخة الخاصة بهم عندما سارت الامور بشكل سيء أثناء معالجة. وهذا ليس مثالا صالحا على ما أعتقد.

وشكرا مقدما لمساعدتكم.

هل كانت مفيدة؟

المحلول

ولقد استعملت الطبقة ملزمة لتنفيذ التصحيح الإختراق.

class Array
  def debug binding
    each do |arg|
      puts "arg = #{eval(arg, binding).inspect}"
    end
  end
end

ويمكنك استخدام هذا لتفقد قائمة قصاصات من التعليمات البرمجية روبي جنبا إلى جنب مع ما مقتطف كل من العوائد:

# .. some hairy code you want to debug ...
['user','current_resource', 'user.owns?(current_resource)'].debug(binding)

والتي ستطبع

user = #<User id:1, username: 'joe', ...
current_resource = #<Comment id:20, ...
user.owns?(current_resource) = false

وأجد أنه من المفيد جدا للتصحيح سريع.

وأنا في حاجة إلى استخدام كائن ملزمة للاستيلاء على نطاق حيث يسمى debug لذلك يمكن استخدامها في eval عند تشغيل debug. ربما يكون هناك طرق أخرى للنفذت هذا لكن باستخدام الربط كان من السهل والسريع. وهناك أيضا أمثلة على الأرجح أفضل بكثير من ما هي كائنات ملزمة مفيدة ل...

نصائح أخرى

وربط كائنات مفيدة عندما تريد تقييم قوالب ERB.

ونلقي نظرة على http://www.seaside.st/ ، انها تطبيقات الويب من Smalltalk إطار العمل. ويستخدم على نطاق واسع استمرارا. أفضل مثال العالم الحقيقي على كيفية استخدامها، وهذا هو CMS http://www.cmsbox.com/en / سم

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