2011-04-21 37 views
5

Tôi chưa bao giờ thực sự sử dụng Traits nhiều trong Scala cho đến nay, và tôi muốn thay đổi điều này. Tôi có mã này:Tại sao tôi cần dấu chấm phẩy sau các lần nhập này?

import tools.nsc.io.Path 
import java.io.File 

trait ImageFileAcceptor extends FileAcceptor { 
    override def accept(f:File) = { 
     super.accept(f) match { 
      case true => { 
       // additional work to see if it's really an image 
      } 
      case _ => false 
     } 
    } 
} 

Vấn đề là, khi tôi biên dịch với sbt, tôi tiếp tục nhận:

ImageFileAcceptor.scala:2: ';' expected but 'import' found.

Nếu tôi thêm ; sau khi nhập khẩu, mã biên dịch. Dưới đây là FileAcceptor:

import java.io.File 

trait FileAcceptor extends Acceptable { 
    override def accept(f:File):Boolean = f.isFile 
} 

Và đây là Acceptable:

import java.io.File 

trait Acceptable { 
    def accept(f:File):Boolean 
} 

Tôi không hiểu tại sao tôi cần phẩy sau khi nhập khẩu.

EDIT: maybe đầu ra của SBT là hữu ích:

[info] Building project tt 1.0 against Scala 2.8.1 
[info] using sbt.DefaultProject with sbt 0.7.5 and Scala 2.7.7 
+0

Khi tôi thêm "true" sau "// work bổ sung để xem nó có thực sự là một hình ảnh" hay không, nó biên dịch tốt với fsc theo Scala 2.9.0 RC1. –

+0

Trên máy tính của tôi, tôi đã thực sự ở đó. Tôi chỉ muốn rút ngắn đoạn mã. – Geo

+10

Đây có thể là sự cố kết thúc dòng - có phải bạn có thể vô tình lưu tệp của mình bằng các kết thúc dòng Macintosh cũ (\ r) không? Điều đó thực sự tạo ra chính xác lỗi bạn đang thấy. – Moritz

Trả lời

4

Khi trình biên dịch scala gặp một dòng Macintosh kết thúc - là \r --Thư biên dịch scala sẽ sai lầm khai báo cần thiết cho một dấu chấm phẩy, như Moritz để suy luận. Mục 1.2 của số Scala Reference Manual mô tả các ký tự dòng mới chính xác. Tôi không thể tìm thấy trong Tài liệu tham khảo mà các ký tự chữ được coi là dòng mới. Từ kinh nghiệm, cả Windows (\r\n) và Unix (\n) đều được chấp nhận. Có lẽ scala là hoàn toàn tương thích với Java trong lĩnh vực này.

Các vấn đề liên quan