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

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

سؤال

إذا قمت بإضافة مائل+مساحة بدء مزدوجة واحدة نقلت سلاسل, أحصل على نتائج مختلفة:

"\ text"
'\ text' 

في إخراج مزدوجة سلسلة مقتبسة أرى سوى الفضاء.
في إخراج واحد سلسلة مقتبسة أرى مائل+الفضاء.

ما الذي يحدث هناك ؟ هل هذا بسبب '\ ' يتم تفسير طابع خاص في اقتباس مزدوجة سلسلة ولكن في واحد نقلا عن سلسلة أحرف يتم الحفاظ عليها كما هي ؟

إذا قمت بتغيير السلاسل إلى هذا ، أرى نفس الناتج ، وهي مائل واحد تليها مسافة ثم نص:

"\\ text"
'\\ text' 

في كلتا الحالتين مائل هو هرب.أنا في حيرة السبب في أنها تعمل بنفس الطريقة في هذه الحالة.

هناك بعض القوانين التي من شأنها أن تساعد على تفسير الفرق الأساسي بين كم واحد السلاسل بين علامات الاقتباس المزدوجة نقلت سلاسل التعامل مع الخطوط المائلة العكسية في روبي ؟

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

المحلول

وكنت يحولك إلى " روبي البرمجة / سلاسل " ل لمحة موجزة جدا ولكنها شاملة من الخلافات.

ومن المرجع:

<اقتباس فقرة>   

وputs "Betty's pie shop"

     

وputs 'Betty\'s pie shop'

     

ولأن "بيتي" يحتوي على الفاصلة العليا، وهو نفس طابع الاقتباس واحد، في السطر الثاني نحن بحاجة إلى استخدام مائل للهروب الفاصلة العليا بحيث يفهم روبي أن الفاصلة هي في سلسلة حرفية بدلا من وضع علامة نهاية سلسلة حرفية. ويطلق على مائل تليها الاقتباس واحد تسلسل هروب.

نصائح أخرى

مزدوج-نقلا عن سلاسل دعم مجموعة كاملة من تسلسلات الهروب ، كما هو مبين أدناه:

  • \a جرس/تنبيه (0x07)
  • \b مسافة للخلف (0x08)
  • \e الهروب (0x1b)
  • \f Formford (0x0c)
  • \n السطر (0x0a)
  • \r عودة (مخطط الشفرة ست عشرية 0x0d)
  • \s مساحة (0x20)
  • \t علامة التبويب (0x09)
  • \v التبويب عمودي (0x0b)

واحد-نقلت السلاسل ، متتاليتين سليمة يتم استبدال واحد مائل ، مائل تليها اقتبس واحدة يصبح واحد اقتباس:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

وروبي يفسر فقط الهروب تسلسل في السلاسل بين علامات الاقتباس المزدوجة. في سلسلة نقل واحدة، وتؤخذ \\ فقط (مائل مائل) و\' (مائل الاقتباس)، والأحرف الخاصة. يجب عليك استخدام السلاسل بين علامات الاقتباس المزدوجة فقط عندما تحتاج إلى المزيد من التفسير. خلاف ذلك، توفر علامات الاقتباس المفردة دفعة الأداء.

عند ذكرتم بما في ذلك اسم متغير، روبي لم يفعل ذلك. فقط يتم التعامل مع اسم المتغير كما أكثر من سلسلة حرفية. لتضمين قيمة متغير (أو أي تعبير) وضع التعبير في مثل هذا:

"#{variable}"

لاحظ أن هذا يعمل فقط في السلاسل بين علامات الاقتباس المزدوجة. لإضافة متغير إلى واحد نقلت واحد، تحتاج إلى القيام بذلك:

'The value of X is: '+X

إذا كنت بحاجة إلى التنسيق خطير، والنظر في إصدار روبي من sprintf وprintf. وهي مغلفة حد كبير حول وظائف C، وتكون قوية جدا، ولكن قليلا مرهقة للاستخدام.

هذه ليست إجابة كاملة (منذ سؤال بسيط وقد أجاب بالفعل) ، بل هو المعلومات التكميلية.

النمط الذي روبي سلسلة نقلا عن هل معروف ؟

لا تستخدم علامات الاقتباس المزدوجة إذا كان لديك الهروب منها.و لا تقع في "واحد مقابل التنصيص" الفخ.روبي قد ممتازة دعم التعسفي المحددات عن سلسلة حرفية:

http://rors.org/2008/10/26/dont-escape-in-strings

أخذت هذه النصيحة و لم تنظر للوراء!

<اقتباس فقرة>   

هل هذا لأن '\' غير   تفسر على أنها ذات طابع خاص في   سلسلة اقتباس مزدوجة ولكن في   سلسلة واحدة نقلت الأحرف   يتم الاحتفاظ كما هو؟

نعم. يتم التعامل مع سلاسل واحدة نقلت على النحو الحرفية. ومحرف السلاسل بين علامات الاقتباس المزدوجة. هذا هو نفسه في اللغات روبي تشبه الأخرى، ولم يتغير في 1.9.

ويمكنك ان تجعل <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

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