هل يمكنني تعطيل قوائم الطباعة من أعداد صحيحة صغيرة كأسلاك في قذيفة إرلانج؟

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

  •  23-09-2019
  •  | 
  •  
هل كانت مفيدة؟

المحلول

يمكنك تعطيل مثل هذا السلوك shell:strings/1 وظيفة بدءا من erlang r16b.

فقط تذكر أن هذا هو الخيار العالمي لجميع قذائف العقدة ، وقد يكون من الحكمة إعادتها بعد الانتهاء من اللعب هو قذيفة في العقد الحية الأطول.

نصائح أخرى

لا أعرف ما إذا كان من الممكن تغيير السلوك الافتراضي للقذيفة ، ولكن يمكنك على الأقل تنسيق إخراجك بشكل صحيح ، باستخدام IO: تنسيق.

هنا مثال:

1> io:format("~p~n", [[65, 66, 67]]).
"ABC"
ok
2> io:format("~w~n", [[65, 66, 67]]).
[65,66,67]
ok

وبما أن القشرة هي فقط للتجربة / الصيانة ، io:format() يجب أن يكون على الأقل بما يكفي لتطبيقك الحقيقي. ربما يجب عليك أيضًا التفكير في كتابة طريقة التنسيق/الطباعة الخاصة بك ، على سبيل المثال formatPerson() أو شيء من هذا القبيل ، الذي يتصرف كل شيء بشكل جيد.

أميل إلى القيام بذلك عن طريق إعداد ذرة إلى قائمتي في القشرة.

علي سبيل المثال:

Eshell V5.7.4  (abort with ^G)
1> [65,66,67].
"ABC"
2> [a|[65,66,67]].
[a,65,66,67]

يمكن أن يكون أيضًا [A ، 65،66،67] ، بالطبع. ولكن [a | fun_that_returns_a_list ()] سوف يطبعون "الشيء الصحيح (ish) معظم الوقت"

اعتبارا من إرلانغ/OTP R16B, ، يمكنك استخدام الوظيفة شل: سلاسل/1 لتشغيل هذا أو إيقاف تشغيله. لاحظ أنه يؤثر أيضًا على طباعة الأشياء التي تهدف في الواقع إلى أن تكون سلاسل ، مثل "foo" في المثال التالي:

1> {[8,9,10], "foo"}.
{"\b\t\n","foo"}
2> shell:strings(false).
true
3> {[8,9,10], "foo"}.   
{[8,9,10],[102,111,111]}

لا ، لا توجد طريقة لتعطيلها. أفضل بديل أجده هو إما طباعة القيمة بشكل صريح في الاستعلام (مع io:format) أو بعد الحقيقة: io:format("~w\n", [v(-1)]).

لا أعتقد أنه يمكنك منعه. يبدو أن ذرة مسبقة مثل kludge - إنها تغير السلسلة الأصلية.

عادةً ما أستخدم القوائم: Flatten (سلسلة) لإجبارها على سلسلة - خاصةً عودة IO_LIB: Format () لا يطبع دائمًا كسلسلة. باستخدام القوائم: Flatten () على ذلك يجعلها واحدة.

يمكنني استخدام ما يلي "على الطراز C":

sprintf(Format) ->
     sprintf(Format, []).
sprintf(Format, Args) ->
    lists:flatten(io_lib:format(Format, Args)).

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

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