2010-09-15 61 views
5

有2個原因,我問:
1.我想一個更好的代碼片段化,以方便對每個功能級別的版本控制
2.我從一些注意力缺陷障礙的鬥爭,這是我很難長件的代碼,如大的類文件Scala中是否有任何方法將類代碼拆分爲多個文件?

爲了解決這些問題我曾經使用包括在C#在C++指令和部分類定義並手動可定義可摺疊區域工作。 Scala 2.8中有這樣的東西嗎?

我試着使用編輯倍標籤在NetBeans IDE中,但它並沒有在斯卡拉編輯:-(不幸的是工作

UPDATE:據我瞭解,也有沒有這樣的設施。斯卡拉所以我想問:誰的人有他們的Bugzilla Scala的作者的任何連接或帳戶(或不管他們使用),,建議他們的想法 - 他們或許應該考慮引入這樣的東西(我被C#地區和部分類例如迷住了,和普通的老式包括也看起來像有一個方便的工具),使斯卡拉通過laconicity更美麗,恕我直言。

+0

這不是真的回答你的問題,但也許你想看看這個:http://jvi.sourceforge.net/它是Netbeans的Vim插件。我不知道你是否喜歡使用Vim,但是這個插件可以摺疊代碼。如果它具有整個Vim特徵集,它也可以通過縮進來摺疊。 – Agl 2010-09-15 20:52:00

+0

使用NetBeans 6.9,代碼摺疊對我來說很好。1和Scala插件。你的意思是特殊的'// '標籤嗎?那些目前沒有工作。 – 2010-09-15 21:41:37

+1

@ rex-kerr,是的,我的意思是編輯器摺疊標籤。摺疊不是手動定義的(按主題),但語言自然(如函數,循環等)似乎對我來說毫無用處。我需要按照共同的主題而不是語法進行分組。 – Ivan 2010-09-15 23:08:07

回答

14

如何做與特質?你定義它是這樣的:

trait Similarity 
{ 
    def isSimilar(x: Any): Boolean 
    def isNotSimilar(x: Any): Boolean = !isSimilar(x) 
} 

...然後你使用它,像這樣:

class Point(xc: Int, yc: Int) extends Similarity 
{ 
var x: Int = xc 
var y: Int = yc 
def isSimilar(obj: Any) = 
    obj.isInstanceOf[Point] && 
    obj.asInstanceOf[Point].x == x 
} 

如果該類Point是更大的,你可以進一步分裂成特性,導致分裂你要的那個。但請注意,我認爲這不是明智之舉,因爲除非您已經知道它,否則很難對代碼進行很好的概述。但是,如果你能以一種很好的方式破解它,那麼你可能會從中獲得一些不錯的可重用塊,所以最終它可能還是值得的。

祝你好運!

2

斯卡拉代碼摺疊在IDEA中正常工作。

+0

我的意思不只是語言塊(如函數)摺疊,而是手動定義的區域進行命名和摺疊,就像使用C#中的#region一樣。 Idea中有這樣一個功能嗎? – Ivan 2010-09-15 23:03:04

+2

是的,可以摺疊任意區域(由省略號代替)。當文件最初打開時,您還可以定義文件結構的哪些部分應該預摺疊。 – 2010-09-15 23:39:19

+0

@ randall-schulz,謝謝。我會試試看。 – Ivan 2010-09-16 09:59:09

1

的版本控制工具和我一起工作(的bzr或混帳,大部分)有任何麻煩,隔離變化行由行。你有什麼用例 - 這足以讓人擔心 - 在哪裏行級別的隔離(允許在沒有用戶干預的情況下更改獨立的方法)是不夠的?

另外,如果你不能專注於大如用許多方法一類的東西,使用起來更加的類。一種方法通常需要你知道其他方法是什麼,這些字段是什麼等等。在不同的文件中進行分割只是要求麻煩。相反,以不同的方式封裝問題,以便您可以一次處理較小的自包含塊。

+0

我的意思是不是按行,而是按功能(當函數增長時,改變它們結束的行數並在下一個函數開始時按下行)。 – Ivan 2010-09-15 23:12:48

+0

至於聚焦 - 我對C++有一個類聲明文件(列出它的所有方法)和每個方法實現的單獨文件非常舒服。對於類文檔來說,這也非常方便,因爲詳細的描述性註釋可以放在聲明文件中,而不會混亂代碼文件。 – Ivan 2010-09-15 23:15:10

+1

@Ivan - 當一些線路壓倒別人曾經的位置時,我一直沒有遇到git混淆的問題。它似乎比代碼更好地匹配代碼。並且在NetBeans中使用摺疊括號,似乎您又回到了一個列出所有方法的文件,除非您可以展開它們。所以如果你至少用大括號摺疊起來,你應該保持良好狀態。 – 2010-09-16 01:51:49

4

我建議在這個link讀取由馬丁白皮書。在本白皮書「Case Sudy:Scala編譯器」一章中,您將瞭解如何實現基於組件的設計,並在多個單獨的文件中包含代碼。

+0

謝謝。將閱讀此。我一直認爲複雜和長的代碼是壞架構的結果。與Scala一起設計好的遊戲仍然是一個探索和思考的領域...... – Ivan 2010-09-16 10:02:05

4
//file A.scala 
trait A { self: B => 
.... 
} 

//file B.scala 
trait B { self: A => 
.... 
} 

//file C.scala 
class C extends A with B 
相關問題