1. 程式人生 > >Scala 變長引數列表 和 Seq

Scala 變長引數列表 和 Seq

scala中可以通過如下形式宣告變長引數列表

    scala> def sum(i : Int *) = i.sum
    sum: (i: Int*)Int

    scala> sum(1,2,3)
    res0: Int = 6

此時sum函式接受一個長度不定的Int的集合,並可以呼叫集合相關方法。引數i可以被當作集合來使用。

我們有時候會通過其他方式生成一個集合,並試圖將其傳入這種帶有變長引數列表的函式中。

此時,就會出現型別不匹配的問題,如下:

    scala> sum(Seq(1,2,3))
    <console>:9: error: type mismatch;
     found   : Seq[Int]
required: Int sum(Seq(1,2,3)) ^

為了解決以上問題,我們可以在集合後將其宣告為 _ * 的,例如:

    scala> sum(Seq(1,2,3):_ *)
    res1: Int = 6

此處的通過上述表現可以看出scala中 _* 應該是 trait Traversable 的某個父型別,因此,需要對Seq等集合類進行一定的轉換

相關推薦

Scala 引數列表 Seq

scala中可以通過如下形式宣告變長引數列表 scala> def sum(i : Int *) = i.sum sum: (i: Int*)Int scala> sum(1,2,3) res0: Int =

Scala引數

變長引數         在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。     def sum(nums: Int*) = {    &

學以致用——Java原始碼——使用引數列表實現n個數的連乘(Variable-Length Argument List)

發現兩年前寫的程式碼與題目要求有較大出入(看來當時沒搞清楚變長引數列表是怎麼回事),改進如下:使用變長陣列作為連乘方法的引數列表(注意public static double multiply(double... factors)一句中的省略號即表示變長引數)。 之前的程式碼參考: ht

scala筆記-引數(5)

變長引數 在Scala中,有時我們需要將函式定義為引數個數可變的形式,則此時可以使用變長引數定義函式。 def sum(nums: Int*) = { var res = 0 for (num <- nums) res += num res } sum(1,

【小白學Lua】之Lua引數unpack函式

一、簡介   Lua的變長引數和unpack函式在實際的開發中應用的還挺多的,比如在設計print函式的時候,需要支援對多個變數進行列印輸出,這時我們就需要用到Lua中的變長引數和unpack函數了。 二、Lua變長引數與unpack函式   Lua中支援可變引數,用 ... 表示。比如定義下面的這樣一

程式中如何列印日誌?(三) VC++6.0BCB6.0都不支援引數的巨集

       接著前面的來講。但是遺憾的是,無論是VC++6.0還是BCB6.0, 都不支援變長引數的巨集,所以在這種環境下,無法徹底解決之前的問題(在VS2005中可以)。既然如此,我們只能求其次了,還是利用變成引數的函式來迂迴解決吧: //---------------

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)

引數探究

前言 變長引數,指的是函式引數數量可變,或者說函式接受引數的數量可以不固定。實際上,我們最開始學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可變引數列表

在Java中我們不知道自己有多少個引數要傳遞怎麼辦?可以試試可變長引數列表。語法格式為:type... args例如求n個數中的最大值,n事先不知道,那麼可以這樣寫:private int max(in

編譯報錯:實際引數列表形式引數列表長度不同 解決方法

由於我給service方法新增了引數 執行編譯時報錯:實際引數列表和形式引數列表長度不同。 錯誤提示:需要兩個引數。實際傳遞了三個引數。 解決方法,service專案的pom檔案Run As。Maven install。 原因:更改了介面引數沒有編譯上。所以專案一直認為是兩

scala多值引數列表

多值引數列表類似java中的object … 今天一個同事問我多值列表,我就把給他演示的demo放出來吧,很簡單的一個概念 直接上程式碼: scala> def printelements(

使用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; 這裡的三個點“...”表示這個模板引數是變長的。 有了這個