2011-09-08 63 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