2015-11-19 16 views
5

Đã chỉnh sửa câu hỏi này để rõ ràng hơn, xem các nhận xét bên dưới để được giải thích.Đối tượng gói cấp cao nhất Scala

Vì vậy, điều này dường như khá rõ ràng đối với tôi, nhưng dường như nó không hoạt động theo cách đó, nhưng nếu tôi có một đối tượng gói scala và nó ở cấp cao nhất của gói của tôi. Nói như com.company và đó là một cái gì đó đơn giản như dưới đây

package com 

package object company{ 
    val something = "Hello world." 
} 

Bây giờ nó sẽ có vẻ với tôi rằng biến này sẽ chảy xuống và có thể truy cập từ đó là gói đứa trẻ, nhưng họ thì không.

// 2 Layers down instead of the direct child 
package com.company.app 

import com.company._ 

object Model extends App { 
    println(something) 
} 

Điều này dường như chỉ có tác dụng với việc nhập khẩu, mà là tốt, nhưng tôi đã hy vọng với đối tượng gói tôi có thể xác định thứ cấp cao nhất cho toàn bộ gói và có nó chảy xuống, nhưng là không phải như vậy ? Có cách nào để làm việc này không? Tôi đánh giá cao bất kỳ thông tin chi tiết nào về điều này.

+1

Bạn đang sử dụng phiên bản scala nào? Tôi đã có thể biên dịch 'com.company.Model' trên' 2.11.7' mà không nhập – Odomontois

+2

Điều này làm việc cho tôi (không có 'nhập'), như mong đợi ... –

+0

Tôi thực sự là một lớp khác, vì vậy đối tượng gói của tôi là 'com.company' nhưng mã thực sự của tôi là một cái gì đó như' com.company.model.ClassFile' và nó không hoạt động. Hãy để tôi thử lại và chắc chắn rằng tôi không phải là hạt. –

Trả lời

3

Mã được đăng trong câu hỏi của bạn hoạt động vì nó không cần nhập. Nếu bạn muốn định nghĩa của tất cả các đối tượng gói trên gói hiện tại của bạn để chảy xuống, bạn sẽ phải thay đổi tuyên bố gói của các lớp trong gói con

biểu tượng Package

package com 

package object company { 
    val something = "Hello world." 
} 

Class trong một gói con com.company .model

package com 
package company 
package model 
// package com.company.model would not work here! 

object Model extends App { 
    println(something) 
} 

Kỹ thuật này được sử dụng thường xuyên trong thư viện scala. Xem ví dụ: tuyên bố gói trong s.c.i.HashSet:

package scala 
package collection 
package immutable 
+0

Thú vị và không phải như thế nào tôi mong đợi rằng để được thực hiện, nhưng nó là tốt để biết nó là có thể! Có cái nhìn sâu sắc nào về lý do tại sao nó được thực hiện trong thời trang này? –

+2

Nó được giải thích đầy đủ tại http://www.scala-lang.org/docu/files/package-clauses/packageclauses_0.html –

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