Bạn nói đúng, nó không được hỗ trợ. Tiền tố (friends.head
) không thực sự chạy qua trình kiểm tra loại để xác định loại chính xác.
Nếu bạn muốn chơi với điều này, bạn nên sử dụng phiên bản Scala mới nhất và chạy với -Dscala.repl.debug
để xem điều gì đang xảy ra.
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
Có thể bạn nên tìm lời khuyên của Paul Phillips, tác giả REPL. Tôi chắc chắn rằng anh ta được xem xét (nếu không được thực hiện một nửa) điều này đã có, và sẽ biết những khó khăn tốt hơn so với bất cứ ai khác.
+1 cho '-Dscala.repl.debug'. Nó có lẽ có thể được thiết lập từ bên trong repl là tốt, phải không? –