`
qzriso
  • 浏览: 237153 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Symbol对象

阅读更多

Symbol 对象用于表现 Ruby 解释器内的名字或一些字符串。它们自动地由 :name :”string” 字面值自动生成。在程序运行期间,对于给定名字的字符串将创建同一 Symbol 对象,而不管名字的含意和上下文环境。

 

也就是说,符号 Symbol 是一种很专一的对象,计算时(就算是包含展开式),只要其结果是同一个字符串的话,它总是返回同一对象。例如,如果 Fred 是一个在上下文环境中,及另一个方法中,另一个类中的常量,则 Symbol:Fred 将在这三个上下文环境中是同一个对象。

既然 Symbol 对象是用来表示符号类,你就可以将一些字符串与 Symbol 对象组成一种一对一的对应关系。

Ruby 脚本中符号有二种书写方法:

:symbol

‘symbol’.intern

先看看第一种书写方式。下面是一些用第一种书写方式的符号例子:

:class

:lvar

:method!

:andthisis?

:$gvar

:@ivar

:@@cvar

:+ 等等

它的语法如下:

: 标识符

: 变量名

: 操作符

可以用于得到符号 Symbol 。在使用字面值来表示符号时, ’:’ 后面只能是标识符、方法名(包括 ‘!’ ’?’ 等后缀)、变量名 ( 包括 ’$’ 等前缀 ) 或可重定义的操作符 ( 除此之外将引发语法错误,即操作符必须是那些可以作为方法进行再定义的操作符 )

 

此外在高版本中,你也可以使用第二种书写方式的符号:

p :’foo-bar’ #=> :”foo-bar”

p :”foo-bar” #=> :”foo-bar”

p %s{foo-bar} #=> :”foo-bar”

在这种表示法中,可以定义任意的符号 ( 但不能包含 ”<chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="”">0”</chmetcnv> )

:”…” 中,反斜线表示法 (“t,n,r,f” 等等 ) 和展开式 (“#{ 表达式 }” ) 都是有效的。

 

让我们再看看前面提到的 :Fred 的例子:

module One

class Fred

end

$f1 = :Fred

End

module Two

Fred = 1

$f2 = :Fred

end

def Fred()

end

$f3 = :Fred

# 由下面可以看出是同一个 Symbol 对象。

$f1.id #=> 2514190

$f2.id #=> 2514190

$f3.id #=> 2514190

下面文字来自于: http://anw.stikipad.com/ocean/show/Symbol

一開始接觸 ruby 時常會被 :symbol 這類寫法搞的很困惑, 在 ruby 中它們被稱為 “Symbol”

分享到:
评论

相关推荐

    ArcObjects GIS应用开发-基于C#

    空间数据的符号华 6.1 颜色对象 6.2 Symbol对象 6.3 制作专题图 6.4 地图的标志 6.5 如何与地图进行互动 7. 地图的输出 7.1 地图的打印输出 7.2 地图的转换输出 8. 空间数据管理 8.1 Geodatabase的基础知识 8.2 ...

    Javascript ES6中数据类型Symbol的使用详解

    Symbol 对象是一个 symbol primitive data type 的隐式对象包装器。 它是JavaScript语言的第七种数据类型,前6种分别是:Undefined、Null、Boolean、String、Number、Object。 语法 Symbol([description]) ...

    ES6 Symbol在对象中的作用实例分析

    主要介绍了ES6 Symbol在对象中的作用,结合实例形式分析了ES6 Symbol在对象中声明、使用方法与相关注意事项,需要的朋友可以参考下

    ES6概念 Symbol toString()方法

    此方法会返回当前symbol对象的字符串表示。 更多关于Symbol的内容可以参阅ES2015 Symbol一章节。 语法结构: symbol.toString(); 代码实例: let s = Symbol(软件开发网); console.log(s+欢迎您); Symbol值不能够隐式...

    js-symbol-tree:使用Symbol将任何对象集合变成其自己的有效树或链接列表

    使用Symbol将任何对象集合变成其自己的有效树或链接列表。 该库旨在为DOM树提供有效的后备数据结构。 您也可以将此库用作有效的链接列表。 任何元数据都直接存储在您的对象上,以确保在恒定时间内执行任何类型的...

    cl-qrencode:Common Lisp中的QR Code 2005编码器

    此程序包中的QR-SYMBOL对象表示QR码,其中MATRIX是MODULES * MODULES数组,每个模块的颜色(暗或亮)由dark-module-p 。 (use-package :cl-qrencode) ( defun encode-symbol (text &key (version 1 ) (level :...

    shim:Dojo 2-提供模块化的ES6 +功能

    @dojo/shim存储库已被弃用并合并到 您可以在我们的上... 另一个例外是“ Symbol功能,因为众所周知的符号需要位于全局“ Symbol对象之外,以确保引用正确的符号。用法要使用@dojo/shim ,请安装该软件包及其必需的对等

    浅谈目前可以使用ES10的5个新特性

    ECMAScript 2015,也称为ES6,... 新功能包括Object.fromEntries(),trimStart(),trimEnd(),flat(),flatMap(),symbol对象的description属性,可选的catch绑定等。 好消息是这些功能已经在最新版本的Firefox和Chrom

    Symbol_Factory_ActiveX

    国外著名工控组态软件中用的ActiveX控件库。非常棒!包含了泵、阀门、电机、管道、容器等所有的对象。开发工具: Visual Basic,支持rsview32、ifix.

    ES6中Symbol类型用法实例详解

    本文实例讲述了ES6中的...假设我们要移动div,也需要在某些情况下判断该div是否处于移动状态,所以我们会想到给div这类的对象设置一个属性。 if (element.isMoving) { smoothAnimations(element); } element.isMoving

    Javascript Symbol原理及使用方法解析

    JavaScript标准中规定对象的key只能是 String 或 Symbol 类型,区别在于 String 类型的key可以重复而 Symbol 类型的key是唯一的。Symbol 的本质是表示一个唯一标识。每次创建一个Symbol,它所代表的值都不可能重复,...

    es6 symbol的实现方法示例

    比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的...

    symbol:ES5 中的 ES6 符号

    一种Symbol可以被用作用于在对象上设置不可枚举(即,“不可见”)属性的唯一密钥。 这对于在 JS 对象中实现真正的私有存储特别有用。 该组件既可以单独使用,也可以作为 ES6 Symbol的 Polyfill 使用。 var symbol =...

    详解ES6 Symbol 的用途

    Symbol 唯一的用途就是标识对象属性,表明对象支持的功能。 这篇文章给大家介绍ES6 Symbol 的用途,感兴趣的朋友跟随小编一起看看吧

    keymirror-symbol:将对象键镜像为符号的功能

    接收一个对象,并创建一个新对象,该对象的每个object的key的key属性设置为Symbol(key) 。 例子 var constants = keyMirror ( { GET_DATA : null , RECEIVED_DATA : null } ) constants . GET_DATA // Symbol(...

    vue 解决provide和inject响应的问题

    Array | { [key: string]: string | Symbol | Object }(一个字符串数组,或一个对象,对象的 key 是本地的绑定名) 要实现父子组件响应,父组件传递的数据类型必须是对象Object,子组件接收的数据类型必须是对象...

    你知道JavaScript Symbol类型怎么用吗

    根据规范,对象的属性键只能是字符串类型或者 Symbol 类型。不是 Number,也不是 Boolean,只有字符串或 Symbol 这两种类型。 到目前为止,我们只见过字符串。现在我们来看看 Symbol 能给我们带来什么好处。 ...

    详解JavaScript 为什么要有 Symbol 类型?

    在深入探讨 Symbol 之前,让我们先看看一些 JavaScript 特性,许多开发人员可能不知道这些特性。 背景 js 中的数据类型总体来说分为两种,他们分别是:值类型 和 引用类型 值类型(基本类型):数值型(Number),...

Global site tag (gtag.js) - Google Analytics