Scala變長引數
變長引數
在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。
def sum(nums: Int*) = { var res = 0 for (num <- nums) res += num res } sum(1, 2, 3, 4, 5)
使用序列呼叫變長引數
在如果想要將一個已有的序列直接呼叫變長引數函式,是不對的。比如val s = sum(1 to 5)。
此時需要使用Scala特殊的語法將引數定義為序列,讓Scala直譯器能夠識別。
這種語法非常有用!一定要好好主意,在spark的原始碼中大量地使用到了。
val s = sum(1 to 5: _*)
案例:使用遞迴函式實現累加
def sum2(nums: Int*): Int = {
if (nums.length == 0) 0
else nums.head + sum2(nums.tail: _*)
}
相關推薦
Scala變長引數
變長引數 在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。 def sum(nums: Int*) = { &
Scala 變長引數列表 和 Seq
scala中可以通過如下形式宣告變長引數列表 scala> def sum(i : Int *) = i.sum sum: (i: Int*)Int scala> sum(1,2,3) res0: Int =
scala筆記-變長引數(5)
變長引數 在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。 def sum(nums: Int*) = { var res = 0 for (num <- nums) res += num res } sum(1,
scala(2) 變長引數 lazy 異常處理 陣列Array Map tuple
可變長引數 宣告引數型別後加* def union(s:Int*)={ var sum=0 for (i:Int<-s){ sum+=i } sum }
c語言中關於變長引數函式的原理
printf函式是在串列埠資訊列印中和串列埠命令列介面功能實現中經常用的函式。呼叫方式一般是這樣子的printf("cmd =%s\r\rn", cmd_str),printf("vol=%dmV, current=%dmA.", vol,current)
【小白學Lua】之Lua變長引數和unpack函式
一、簡介 Lua的變長引數和unpack函式在實際的開發中應用的還挺多的,比如在設計print函式的時候,需要支援對多個變數進行列印輸出,這時我們就需要用到Lua中的變長引數和unpack函數了。 二、Lua變長引數與unpack函式 Lua中支援可變引數,用 ... 表示。比如定義下面的這樣一
變長引數探究
前言 變長引數,指的是函式引數數量可變,或者說函式接受引數的數量可以不固定。實際上,我們最開始學C語言的時候,就用到了這樣的函式:printf,它接受任意數量的引數,向終端格式化輸出字串。本文就來探究一下,變長引數函式的實現機制是怎樣的,以及我們自己如何實現一個變長引數
Javascript 函式變長引數(…rest)
在C/C++中 有argc argv可以傳入變長引數給程式。在node有時就會遇到這個需求。 在ES5中可以使用arguments物件了。 在ES6標準中引入了 rest 引數(形式為…變數名),用於獲取函式的多餘引數。rest 引數搭配的變數是一個數組,該變數
lua ... (變長引數)
1.獲取 local arg = { ... } --這裡的...和{}符號中間需要有空格號,否則會出錯 2.獲取長度 local function test( ... )
C++變長引數模板
先給出一個例子: #include <iostream> #include <cstdlib> void print() { // 這裡結束模板遞迴地終止鏈 std::cout << "I am empty function and I
學以致用——Java原始碼——使用變長引數列表實現n個數的連乘(Variable-Length Argument List)
發現兩年前寫的程式碼與題目要求有較大出入(看來當時沒搞清楚變長引數列表是怎麼回事),改進如下:使用變長陣列作為連乘方法的引數列表(注意public static double multiply(double... factors)一句中的省略號即表示變長引數)。 之前的程式碼參考: ht
程式中如何列印日誌?(三) VC++6.0和BCB6.0都不支援變長引數的巨集
接著前面的來講。但是遺憾的是,無論是VC++6.0還是BCB6.0, 都不支援變長引數的巨集,所以在這種環境下,無法徹底解決之前的問題(在VS2005中可以)。既然如此,我們只能求其次了,還是利用變成引數的函式來迂迴解決吧: //---------------
使用C++11變長引數模板 處理任意長度、型別之引數
變長模板、變長引數是依靠C++11新引入的引數包的機制實現的。 一個簡單的例子是std::tuple的宣告: template <typename... Elements> class tuple; 這裡的三個點“...”表示這個模板引數是變長的。 有了這個強大的工具,我們可以編寫更加豐
C++11嚐鮮:Variadic Function Templates(帶變長引數的函式模板)(續)
程式碼1 #include <iostream> #include <string> #include <boost/ref.hpp> #include <b
Java 變長引數Varargs
Varargs (variable arguments)可變長引數是Java 1.5引入的特性。 方法的形參如print(String ... s),實參為任意數目的值。 package semantics.statement; public class VarargsD
使用C++11變長引數模板 處理任意長度、型別之引數例項
變長模板、變長引數是依靠C++11新引入的引數包的機制實現的。 一個簡單的例子是std::tuple的宣告: template <typename... Elements> class tuple; 這裡的三個點“...”表示這個模板引數是變長的。 有了這個
Lua變長引數詳解
Lua變長引數: Lua支援變長引數,使用簡單(藉助於table、多重賦值), Lua中的函式還可以接受不同數量的實參。例如:在呼叫print時可以傳入一個、兩個或多個實參。引數
[Java] Java中的變長引數的使用
1 基本使用方法 Variable-length argument lists are a new feature in J2SE 5.0. Programmers can create methods that receive an unspecifie
c++ 變長引數的作為引數
有時候不僅需要處理變長引數,還需要將變長引數作為引數,傳遞給其他函式。 先上一段程式碼,定義一個函式: /*函式說明write_log, 向檔案中寫字串 *@param pf 檔案指標 *@param format 格式字串(與printf格式相同) *@param ..
關於Scala重寫Java可變長引數方法
public interface KeyGenerator { /** * Generate a key for the given method and its parameters. * @param target the target instance