2016-12-16 52 views
1

在蟒我可以簡單地定義一個函數是這樣的:階:通過元組參考起作用

def func(lst): 
    lst[0] = lst[0] + 5 
    return lst 

這「LST」可以採取不同的長度作爲參數的列表。

如何在Scala中使用元組來實現它?

注:我試圖在Python中編寫的Scala中實現Spark程序(或通用庫)。在該程序中有這個函數,它將RDD的每條記錄作爲參數,對其進行操作並返回。現在這些記錄的長度可以根據調用函數的RDD而變化。

回答

0

你可以這樣做:

def add5ToHead(list: List[Int]) = { 
    list match { 
    case head :: tail => head+5 :: tail 
    case l => l 
    } 
} 
+0

唯一的問題是_List/Tuple_的元素可以是不同的類型。所以它必須是一個元組。 – Mrinal

0

copy方法可能是一個很好的適合你的情況:

def func1(t: (Int, Int, Int)) = t.copy(_1 = t._1 + 5) 

Int類型和+5只是一個例子,你可以通過在值和通過額外的參數鍵入。

你也可以應用PartialFunction你的方法,如:

val partialFunc1: PartialFunction[Int, Int] = { 
    case x => x + 5 
} 

def func1(t: (Int, Int, Int), f: PartialFunction[Int, Int]) = t.copy(_1 = f(t._1)) 

func1((1,2,3), partialFunc1) // output will be (6,2,3) 
2

確切相當於你的描述會是這個樣子這個Python函數:

def func(list: List[Any]) = list.headOption.map { 
    _.asInstanceOf[Int] + 5 
} ++ list.tail 

不過不要」不要這樣做。類型安全性(能夠確保在編譯時你正在查看的數據與你期望的類型完全相同)是從python開始選擇scala的最大原因之一。

如果你不打算使用它,爲什麼還要在scala中重寫你的python代碼?只需使用你擁有的。