Tôi bắt đầu học Scala và tôi đã xem một đoạn trích từ sách giáo khoa Lập trình trong Scala mà tôi không hiểu lắm. Đã hy vọng một số người có thể giúp tôi?Hiểu Scala: chuyển các hàm làm đối số
Đây là từ Liệt kê 9.1 từ Lập trình trong Scala, 2nd Edition.
object FileMatcher {
private def filesHere = (new java.io.File(".")).listFiles
}
private def filesMatching(matcher: String => Boolean) =
for (file <- filesHere; if matcher(file.getName)) yield file
def filesEnding(query: String) =
filesMatching(_.endsWith(query)) // ???
def filesContaining(query: String) =
filesMatching(_.contains(query)) // ???
def filesRegex(query: String) =
filesMatching(_.matches(query)) // ???
Tôi hơi bối rối với các dòng có // ???
. Việc sử dụng các _
bằng cách nào đó tạo ra một chức năng nặc danh được chuyển đến filesMatching
? Hoặc không _
không có gì để làm với điều này, và thay vào đó trình biên dịch thấy rằng filesMatching
đòi hỏi một chức năng và do đó không thực hiện _.endsWith(query)
như một biểu thức mà thay vào đó làm cho biểu thức một chức năng?
Không có dòng nào có '// ???' ở trên. Có lẽ bạn quên thêm những? –
Xin lỗi về điều đó, đã thêm '// ???' ngay bây giờ. – C0deAttack
có thể trùng lặp của [Scala \ _ Placeholders (Mã này hoạt động như thế nào?)] (Http://stackoverflow.com/questions/6880407/scala-placeholders-how-does-this-code-function) –