2012-09-10 33 views
5

Tôi nghĩ điều này dễ thấy hơn với ví dụ.scala: ngăn không cho đối tượng Đồng hành ẩn định nghĩa của Lớp gốc

Hãy nói rằng tôi có một lớp trường hợp Điều kiện, với một đối tượng Điều kiện đồng hành dùng để cung cấp một constructor thay thế, như thế này: cảnh báo

case class Condition(
    field: String, 
    values: List[String]) 
} 

object Condition { 
    def apply(field: String, value: String): Condition = { 
    Condition(field, List(value)) 
    } 
} 

Khi tôi nhập nó từ khác tôi nhận được như sau (mà cuối cùng biến vào một lỗi):

import utils.query.Condition 

[warn] [...]/ConditionBuilder.scala:14: imported `Condition' is permanently hidden by definition of object Condition in package query 
[warn] import utils.query.Condition 
[warn]  ^
[warn] one warning found 

tôi muốn được tiếp cận với Type Điều kiện, khi declargin kiểu của một biến, và để các đối tượng đồng hành, khi thực hiện một trong những phương pháp đó là

Có cách nào để đạt được điều này và tránh cảnh báo này (ngoài việc đổi tên đối tượng đồng hành, tất nhiên)?

+0

Bạn đang sử dụng phiên bản trình biên dịch Scala nào? –

+0

Tôi có thể hỏi nếu Điều kiện được xác định trong truy vấn gói bởi bất kỳ cơ hội nào không? Trong trường hợp này, chỉ cần thả nhập và bạn đã hoàn tất. –

+0

Tôi đang sử dụng trình biên dịch scala đi kèm với gói chơi 2.0.3: Chào mừng bạn đến với phiên bản Scala 2.9.1.final (Java HotSpot (TM) Máy chủ 64-bit máy chủ, Java 1.7.0_06). – opensas

Trả lời

2

cho đến nay bây giờ, thực hiện giải pháp tôi đã tìm thấy được nhập khẩu như thế này:

import utils.query 

[...] 

val myCondition: query.Condition 

và cảnh báo đã biến mất, nhưng tôi nghĩ rằng cần phải có một giải pháp tốt hơn ...

1

gì bạn mô tả isn 'cách nó hoạt động (hoặc cung cấp một mẫu hoàn chỉnh).

Nghe có vẻ giống như một môi trường biên dịch cũ. Đã được các đối tượng gói tham gia tại bất kỳ điểm nào? Làm một biên dịch sạch sẽ, khởi động lại trình biên dịch bất kỳ cư dân, và gọi cho chúng tôi vào buổi sáng.

Ví dụ: nhập khoản nhập khẩu p. {X => y} đổi tên từ p.x thành tên y y và tên loại p.x thành tên loại y. (SLS 4,7)

Nhưng có một bình luận lớn trong mã xung quanh giao lộ của các lớp học tình huống và đồng hành của họ, trong đó bao gồm top-ten bình luận thú vị này:

// What exactly this implies and whether this is a sensible way to 
// enforce it, I don't know. 

Tôi không nói rằng các bình luận có bất kỳ mang cần thiết về trường hợp của bạn, nhưng đó là một dòng tuyệt vời.

0

Tôi đã có một lớp học chính với tên Server và tôi đã tạo ra một máy chủ đê chắn sóng ở những lớp học chính theo cách sau:

 import org.eclipse.jetty.server.Server 

    var server:Server=new Server() 

tôi dưới đây cảnh báo về chạy sbt run

[warn] /home/xxx/xxx/xxx/src/main/scala/com/xxx/xxx/main/Server.scala:3: imported `Server' is permanently hidden by definition of object Server in package main 
    [warn] import org.eclipse.jetty.server.Server 
    [warn]        ^
    [warn] one warning found 

Tôi đổi tên thành lớp học chính của mình và cảnh báo biến mất.

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