Scala中的值類

Value classes are a special mechanism in Scala that is used to help the compiler to avoid allocating run time objects.

值類是Scala中的一種特殊機制,用于幫助編譯器避免分配運行時對象。

This is done by defining a subclass of AnyVal. The only parameter it excepts is the datatype whose value is to be redefined. This is used to redefine all value types except the hashCode and equals.

這是通過定義AnyVal的子類來完成的 。 它唯一的參數是要重新定義其值的數據類型。 這用于重新定義除hashCode和equals之外的所有值類型。

The value types that can be redefined are Char, Int, Float, Double, Long, Short, Byte, Unit, and Boolean.

可以重新定義的值類型為CharIntFloatDoubleLongShortByteUnitBoolean

Syntax:

句法:

The syntax for creating a value class in Scala,

在Scala中創建值類的語法,

case class class_name(val val_ name : datatype) extends AnyVal 

The value class can have methods that are used to redefine the values or wrap the value used at the time of object creation to a different value.

值類可以具有用于重新定義值或將對象創建時使用的值包裝為其他值的方法。

Some points to remember about value class,

關于價值艙,要記住一些要點,

  1. The main purpose of value class is to optimize the program by avoiding run time allocations.

    值類的主要目的是通過避免運行時分配來優化程序。

  2. The value class cannot be inherited by other classes.

    值類不能被其他類繼承。

  3. The value class cannot be nested.

    值類不能嵌套。

  4. The value class is used to redefine all value types except the hashCode and equals.

    值類用于重新定義除hashCodeequals之外的所有值類型。

  5. It can have only methods (def) as its member i.e. no variable is allowed.

    它只能有方法( def )作為其成員,即不允許任何變量 。

Scala程序了解價值類的概念 (Scala program to understand the concept of value class)

// Program to show the working of 
// value class in Scala
class valueClass(val str: String) extends AnyVal {
def doubleprint() = str + str
}
object myObject {
def main(args: Array[String]) {
val obj = new valueClass("Scala ")
println(obj.doubleprint())
}
}

Output:

輸出:

Scala Scala 

Explanation:

說明:

Here, we have created a value class in Scala named valueClass for string type which has a function named doubleprint that stores the string twice in the object.

在這里,我們在Scala中為字符串類型創建了一個名為valueClass的值類,該值類具有一個名為doubleprint的函數,該函數將字符串在對象中存儲兩次。

Generally, the value Class is used to store the same data as in the object and it just functions to improve the performance.

通常,值Class用于存儲與對象中相同的數據,它僅用于提高性能。

什么是價值類? (What value class does?)

The value class acts as a wrapper class to other types. And the instances of wrapper class are not created at the compile time which improves the performance as less initialization is to be done and compiler time.

值類充當其他類型的包裝器類。 而且,包裝類的實例不是在編譯時創建的,這可以提高性能,因為需要執行的初始化和編譯時間更少。

翻譯自: https://www.includehelp.com/scala/value-class.aspx

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377050.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《MySQL8.0.22:Lock(鎖)知識總結以及源碼分析》

目錄1、關于鎖的一些零碎知識,需要熟知事務加鎖方式:Innodb事務隔離MVCC多版本并發控制常用語句 與 鎖的關系意向鎖行級鎖2、鎖的內存結構以及一些解釋3、InnoDB的鎖代碼實現鎖系統結構lock_sys_tlock_t 、lock_rec_t 、lock_table_tbitmap鎖的基本模式的…

關于ORA-04021解決辦法(timeout occurred while waiting to lock object)

某個應用正在鎖定該表或者包 表為 select b.SID,b.SERIAL#,c.SQL_TEXT from v$locked_object a, v$session b, v$sqlarea c where a.SESSION_ID b.SID and b.SQL_ADDRESS c.ADDRESS and c.sql_text like %table_name% 包為 select B.SID,b.USERNAME,b.MACHINE FROM V$ACCESS …

HtmlAutoTestFrameWork

前段時間做的自動化測試的是Silverlight的,框架都已經搭好。突然測試發現這里還有一個要發送郵件的html頁面,并且將另外啟動瀏覽器,于是今天下午把這個html的也寫出來。用法 : HtmlAutoTestFrameWork htf new HtmlAutoTestFrameW…

L8ER的完整形式是什么?

L8ER:稍后 (L8ER: Later) L8ER is an abbreviation of "Later". L8ER是“ Later”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Yahoo Messenger, and Gmail, etc…

Randomize select algorithm 隨機選擇算法

從一個序列里面選擇第k大的數在沒有學習算法導論之前我想最通用的想法是給這個數組排序,然后按照排序結果返回第k大的數值。如果使用排序方法來做的話時間復雜度肯定至少為O(nlgn)。 問題是從序列中選擇第k大的數完全沒有必要來排序&#xff…

《Linux雜記:一》

目錄CPU負載和CPU利用率CPU負載很高,利用率卻很低的情況負載很低,利用率卻很高常用linux命令常用的文件、目錄命令常用的權限命令常用的壓縮命令CPU負載和CPU利用率 可以通過 uptime , w 或者 top 命令看到CPU的平均負載。 Load Average :負載的3個數字,比如上圖的0.57、0.4…

IOS Plist操作

代碼:copy BUNDLE下的plist文件 到 library下面。 bundle下不支持些,library,doc路徑支持讀與寫。 (void)copyUserpigListToLibrary {NSFileManager *fileManager [NSFileManager defaultManager];NSArray *paths NSSearchPathForDirector…

《線程管理:線程基本操作》

目錄線程管理啟動線程與(不)等待線程完成特殊情況下的等待(使用trycath或rall)后臺運行線程線程管理 啟動線程與(不)等待線程完成 提供的函數對象被復制到新的線程的存儲空間中,函數對象的執行…

scala特質_Scala的特質

scala特質Scala特質 (Scala traits) Traits in Scala are like interfaces in Java. A trait can have fields and methods as members, these members can be abstract and non-abstract while creation of trait. Scala中的特性類似于Java中的接口 。 特征可以具有作為成員的…

優化PHP代碼的40條建議(轉)

優化PHP代碼的40條建議 40 Tips for optimizing your php Code 原文地址:http://reinholdweber.com/?p3 英文版權歸Reinhold Weber所有,中譯文作者yangyang(aka davidkoree)。雙語版可用于非商業傳播,但須注明英文版作…

Iptables入門教程

轉自:http://drops.wooyun.org/tips/1424 linux的包過濾功能,即linux防火墻,它由netfilter 和 iptables 兩個組件組成。 netfilter 組件也稱為內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內…

《線程管理:傳遞參數、確定線程數量、線程標識》

參考《c Concurrency In Action 》第二章做的筆記 目錄傳遞參數量產線程線程標識傳遞參數 thread構造函數的附加參數會拷貝至新線程的內存空間中,即使函數中的采納數是引用類型,拷貝操作也會執行。如果我們期待傳入一個引用,必須使用std::re…

手把手玩轉win8開發系列課程(14)

這節的議程就是——添加appbar appbar是出現在哪兒了,出現在屏幕的底部。他能使用戶能用手勢或者使用鼠標操作程序。metro UI 重點是在主要的控件使用許多控件,使其用戶使用win8電腦更加的方便。而appBar使其用戶體驗更好。在這節中,我將告訴…

No identities are available for signing 的解決辦法

今天重新上傳做好的app提交到app store,結果就出現標題上的錯誤。“No identities are available for signing”。 以后碰到這樣的問題按照下面幾個步驟來做: 進入Distribution -----下載發布證書 -----雙擊安裝-----重啟Xcode就能上傳了 其他細節 如果再…

半連接反連接

半連接&反連接 1. 半連接 半連接返回左表中與右表至少匹配一次的數據行,通常體現為 EXISTS 或者 IN 子查詢。左表驅動右表。只返回左表的數據,右表作為篩選條件。 可以用 EXISTS、 IN 或者 ANY 舉例:表t1和表t2做半連接,t…

匿名方法和Lambda表達式

出于MVVM學習的需要,復習下匿名方法和Lambda表達式,因為之前用的也比較少,所以用的也不是很熟練,Baidu下相關的知識,寫了這個Demo,目標是用簡單的方法展示這個怎么用。 這里偏重的和LINQ中的Lambda表達式 …

爛橘子

Problem Statement: 問題陳述: Given a matrix of dimension r*c where each cell in the matrix can have values 0, 1 or 2 which has the following meaning: 給定尺寸r * C的矩陣,其中矩陣中的每個單元可以具有其具有以下含義的值0,1或2…

android junit 測試程序

http://blog.csdn.net/to_cm/article/details/5704783 Assert.assertEquals(2, t); 斷言轉載于:https://www.cnblogs.com/wjw334/p/3714120.html

MySQL 8.0.22執行器源碼分析HashJoin —— BuildHashTable函數細節步驟

BuildHashTable函數細節步驟 該函數位置處于hash_join_iterator.cc 403 ~ 560行 step1:如果被驅動表迭代器沒有更多的行數,更新m_state為EOR,然后返回false,表明創建hash表失敗 if (!m_build_iterator_has_more_rows) {m_state…

《那些年啊,那些事——一個程序員的奮斗史》——125

距離離職交接的一個月時間還剩幾天,本來應該是平淡無事的,卻沒想到最后還是波瀾四起。昨天下班前,公司突然停了電。這本是件普通得不能再普通的事情,可沒想到過了一會來電了,或許是波峰電壓太大,或許是穩壓…