سؤال

رأيت رمزًا أدناه:

Map(1 -> "one", 2 -> "two") map _._1

هذا يعيد [int] ، ولكن إذا كنت أرغب في فعل أي شيء مع الخريطة ، كيف أفعل ذلك؟

أريد أن أفعل شيئًا مثل أدناه ، لكن الكود أدناه لا يمكن تجميع x => x واستخدم العنصر النائب:

Map(1 -> "one") map (_)  // map (Int, String) to (Int, String) by nothing change
// I test some other way, but all can't compile

كيف نفعل ذلك؟

محدث

آسف على الخلط بين شخص عاطفي. اريد ان اعرف لماذا map (_) != map (x => x), ، برنامج التحويل البرمجي يحول هذا الرمز إلى (x$1) => Map(1.$minus$greater("one")).map(x$1) لما لا Map('a'.$minus$greater(1)).map((x$1) => x$1), ، وهل هناك طريقة يمكن استخدامها _ اصنع هذا الرمز؟

لقد استخدمت كود أدناه لمساعدة برنامج التحويل البرمجي استنتج _ يكتب:

Map(1 -> "one") map (_:((Int, String))=>(Int, String))
// but it return (((Int, String)) => (Int, String)) => scala.collection.immutable.Map[Int,String] = <function1>

يبدو أن المحلل لم يكن متأكدًا من مكان وضع بداية الوظيفة المجهولة. لذا فإن سؤالي الجديد هو "كيفية مساعدة المحلل المحلل على تقييد حدود وظيفة مجهولة؟"

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

المحلول

لست متأكدًا من فهم السؤال ، لكن identity ربما ما تبحث عنه:

scala> Map(1 -> "one") map (identity)
res66: scala.collection.mutable.Map[Int,java.lang.String] = Map((1,one))

أو ، قم ببعض الحيل:

scala> def __[A](x: A): A = x
__: [A](x: A)A

scala> Map(1 -> "one") map (__)
res1: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one))

نصائح أخرى

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

لا يمكنني رؤية أي قيمة في ما تحاول القيام به هنا ، فإن الطريقة الصحيحة لتعيين مجموعة لنفسها هي عدم استدعاء الخريطة!

خاطئ - ظلم - يظلم:

Map(1 -> "one") map (_)

الصحيح:

Map(1 -> "one")

إنها ليست مفيدة كعملية للنسخ الضحلة ، فإن خريطة سكالا الافتراضية غير قابلة للتغيير ولا فائدة من نسخها.


  Map(1 -> "one") map((x)=>x)

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