2011-09-08 62 views
1

我試圖翻譯:http://thinkstats.com/survey.py這個腳本。幫助,在將Python腳本翻譯爲Scala的過程中

因此,這裏就是我的翻譯,現在(蟒蛇):

"""This file contains code for use with "Think Stats", 
by Allen B. Downey, available from greenteapress.com 

Copyright 2010 Allen B. Downey 
License: GNU GPLv3 http://www.gnu.org/licenses/gpl.html 
""" 

import sys 
import gzip 
import os 

class Record(object): 
    """Represents a record.""" 

class Respondent(Record): 
    """Represents a respondent.""" 

class Pregnancy(Record): 
    """Represents a pregnancy.""" 

斯卡拉:

import sys.process._ 
import java.util.zip.GZIPInputStream 
import java.io._ 

class Record[T](val obj: T) 

class Respondent[T](val record: Record[T]) 

class Pregnancy[T](val record: Record[T]) 

問: 我做了class Respondentclass Pregnancy是否正確?這些類的類型註釋是否正確?邏輯是否正確?我剛剛閱讀了類型參數化,所以我在這方面有點不確定,並想看看我是否在正確的道路上。

謝謝你的時間。

+0

這可能是正確的 - 我不確定。類型參數「T」用於什麼? – Owen

+0

@Owen我還沒有。我只知道這是一個Object類型的參數。它可能是一個流,因此我只是將它註釋爲一個類型T.當我聲明Respondent和Pregnancy類時,我得到一個錯誤,因爲Record需要一個參數,所以我最終註釋記錄類型的答覆和懷孕參數。 > ____ < – mythicalprogrammer

+0

如果可以有不同種類的類,通常使用類型參數,例如,您可以使用一個'Record [Int]'作爲保存'Int'的記錄。我非常確定這對Record Record是有意義的,但我不確定「Respondent」 - 不同種類的受訪者有不同類型的記錄嗎? – Owen

回答

5

我記得,你所展示的Python語法是類擴展(繼承)。等效斯卡拉將

/** Represents a record. 
*/ 
class Record 

/** Represents a respondent. 
*/ 
class Respondent extends Record 

/** Represents a pregnancy. 
*/ 
class Pregnancy extends Record 

形式/** ... */的斯卡拉評論會顯示在ScalaDoc文檔。

此處不需要類型參數化。它的主要用途是允許類接受或返回任意參數化類型的值。例如,List[Int]List[String]分別是整數和字符串的列表。

+0

謝謝。做了一個快速的谷歌來證實這一點,非常驚訝/震驚Python如何繼承。 – mythicalprogrammer