سؤال

دعنا نقول أنا أستخدم irb, ، واكتب a = 5. وبعد كيف يمكنني إزالة تعريف a بحيث الكتابة a إرجاع أ NameError?

بعض السياق: لاحقا أريد القيام بذلك:

context = Proc.new{}.binding
context.eval 'a = 5'
context.eval 'undef a'  # though this doesn't work.
هل كانت مفيدة؟

المحلول

هناك Remove_Class_Variable., refect_instance_variable. و Remove_Const. الأساليب ولكن لا يوجد حاليا أي ما يعادل المتغيرات المحلية.

نصائح أخرى

يمكنك تجنب عدم إعلان التغير عن طريق تقليل النطاق الذي يوجد فيه المتغير:

def scope 
  yield
end

scope do 
  b = 1234
end

b  # undefined local variable or method `b' for main:Object

يمكنك دائما "مسح سجل IRB للمتغيرات المحلية من خلال استدعاء شغل فرعي IRB. فكر في كيفية عمل قذائف BASH فيما يتعلق بمتغيرات البيئة غير الضرورية. منذ وضع تفاعلي مستنقع، يجب أن يعمل هذا الحل من أجل ذلك.

فيما يتعلق بقانون الإنتاج، لن أرغب في إلغاء مزين بالمتغيرات المحلية كجزء من الحل - من المحتمل أن يكون التجزئة المفتاح أفضل لهذا النوع من السيناريو.

إليك ما أقصده:

$ irb
irb(main):001:0> a = "a"
=> "a"
irb(main):002:0> defined? a
=> "local-variable"
irb(main):003:0> irb # step into subshell with its own locals
irb#1(main):001:0> defined? a
=> nil
irb#1(main):002:0> a
NameError: undefined local variable or method `a' for main:Object
    from /Users/dean/.irbrc:108:in `method_missing'
    from (irb#1):2
irb#1(main):003:0> exit
=> #<IRB::Irb: @context=#<IRB::Context:0x1011b48b8>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x1011b3df0>>
irb(main):004:0> a # now we're back and a exists again
=> "a"

حاليا ليس لديك وسيلة لإزالة المتغيرات العالمية والمتغيرات المحلية ومتغيرات الطبقة. يمكنك إزالة الثوابت باستخدام طريقة "إزالة_كونست" على الرغم من

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

الطرق الوحيدة التي يمكنني التفكير فيها للقيام بذلك Integer#times أو Array#each مثل ذلك:

1.times do |a|
  a = 5
  # code…
end

[5].each do |a|
  # code…
end

ربما هناك طرق أخرى، حتى من الأنظف للحد من كتلة إلى جانب ذلك. هذه ليست نظيفة كما أردت وأحب أن أرى ما إذا كان شخص ما لديه طريقة نظافة للاستخدام للقيام بذلك.

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