2012-02-25 11 views
6

मैंने इसे स्केल 2.9.1 और स्कैला 2.10 एम 2 में करने की कोशिश की।स्कैला जेनरिक और कंसोल ऑटो पूर्ण

यहाँ टर्मिनल से स्केला आदेश चलाने के बाद मेरी स्केला प्रतिलेख है:

 
scala> case class Person(val name: String) 
defined class Person 

scala> val friends = List(Person("Fred")) 
friends: List[Person] = List(Person(Fred)) 

scala> friends.head.TAB 
asInstanceOf isInstanceOf toString  

scala> friends.head.name 
res0: String = Fred 

scala> :t friends 
List[Person] 

scala> :t friends.head 
Person 

स्काला जानता है कि मित्र प्रकार सूची [व्यक्ति] की है और वह friends.head प्रकार व्यक्ति का है। क्या यह नाम को संभावित पूर्णता के रूप में सुझाव देने में सक्षम नहीं होना चाहिए?

यदि यह समर्थित नहीं है, तो मुझे इसे ठीक करने में खुशी होगी। मैंने स्रोत कोड (स्कैला-2.9.1.फिनल-स्रोत/src/jline/src/main/java/scala/tools/jline/console/fullter) में चारों ओर देखा, लेकिन मैं इसे ठीक करने के तरीके के बारे में किसी भी पॉइंटर्स की सराहना करता हूं ।

धन्यवाद।

टिम

उत्तर

7

आप सही हैं, यह समर्थित नहीं है। उपसर्ग (friends.head) सटीक प्रकार निर्धारित करने के लिए वास्तव में टाइप-चेकर के माध्यम से नहीं चलाया जाता है।

यदि आप इसके साथ खेलना चाहते हैं, तो आपको स्कैला के नवीनतम संस्करण का उपयोग करना चाहिए, और यह देखने के लिए -Dscala.repl.debug के साथ चलाना चाहिए।

scala> ps.head. 
complete(ps.head., 8) last = (, -1), verbosity: 0 
List[$read$$iw$$iw$Person] completions ==> List(removeDuplicates, toStream, stringPrefix, reverse, span, dropWhile, takeWhile, splitAt, takeRight, slice, drop, take, toList, +:, ++, mapConserve, reverse_:::, :::, ::, companion, lastIndexWhere, indexWhere, segmentLength, isDefinedAt, lengthCompare, sameElements, dropRight, last, reduceRight, reduceLeft, foldRight, foldLeft, find, count, exists, forall, foreach, apply, length, productPrefix, productIterator, seq, corresponds, iterator, toSeq, toString, view, indices, sorted, sortBy, sortWith, padTo, :+, updated, patch, distinct, intersect, diff, union, contains, containsSlice, lastIndexOfSlice, indexOfSlice, endsWith, startsWith, reverseIterator, reverseMap, combinations, permutations, size, lastIndexOf, indexOf, prefixLength, lift, andThen, orElseFast, orElse, compose, canEqual, zipWithIndex, zipAll, zip, copyToArray, sliding, grouped, head, toIterator, toIterable, isEmpty, transpose, flatten, unzip3, unzip, genericBuilder, withFilter, toTraversable, inits, tails, init, lastOption, tail, headOption, scanRight, scanLeft, scan, groupBy, partition, collect, filterNot, filter, flatMap, map, ++:, hasDefiniteSize, repr, isTraversableAgain, par, addString, mkString, toMap, toSet, toBuffer, toIndexedSeq, toArray, copyToBuffer, minBy, maxBy, max, min, product, sum, aggregate, fold, reduceOption, reduce, reduceRightOption, reduceLeftOption, :\, /:, collectFirst, nonEmpty, /:\, asInstanceOf, isInstanceOf, productArity, productElement) 
List[$read$$iw$$iw$Person] -> 'head' ==> Some(()Object (31 members)) 
()Object completions ==> List(toString, asInstanceOf, isInstanceOf) 
package <root> completions ==> List(target, project, lib_managed, quicktime, ch, scala, apple, java, com, sunw, javax, sun, org, asInstanceOf, isInstanceOf, toString) 
package <root> -> 'ps' ==> None 
object Predef -> 'ps' ==> None 
package scala -> 'ps' ==> None 
package java.lang -> 'ps' ==> None 
tryCompletion(Parsed(ps.head./8), _) lastBuf = ps.head., lastCursor = 8, p.position = 8 

asInstanceOf isInstanceOf toString 

आपको शायद पॉल फिलिप्स, आरईपीएल लेखक की सलाह लेनी चाहिए। मुझे यकीन है कि वह पहले से ही माना जाता है (यदि आधा लागू नहीं किया गया है), और किसी और की तुलना में कठिनाई को बेहतर तरीके से जानेंगे।

+1

+1 '-Dscala.repl.debug' के लिए +1। यह शायद अंदरूनी प्रतिलिपि से भी सेट किया जा सकता है, है ना? –

संबंधित मुद्दे