`
fujinbing
  • 浏览: 232906 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby 中的符号

    博客分类:
  • java
 
阅读更多
1.  "<<"

1) 创建一个绑定到特定对象的class

a="my string"

class <<a

def to_s

"this is #{self}"  #将原来的array中的to_s方法进行修改

end

end

puts a.to_s  # this is my string

2."@"

instance variable is simply a name preceded by an “at” sign (@)

3. "@@"

Class Variables

4.  “$”
  全局变量
5.
初学Ruby的时候,往往对字符串(String类)与符号(Symbol)这两种变量类型分不清楚,其实,我们大可不必纠缠这两种变量类型的内部实现,只需记住它们的特点和区别就可以了:

  字符串和符号,都是Ruby中表示文本的方式

不管字符串变量也好,符号变量也好,都是用来表示文本的,它们之间,也可以互相转换(通过to_sym和to_s)

   1.
      >>  "book".to_sym
   2.
      => :book
   3.
      >>  :track.to_s
   4.
      => "track"



2. 相同的符号是一个对象,相同的字符并不一定是一个对象

这就是符号和字符串最大的差别,符号是不可变的,不能对一个符号进行修改。所以说,两个看起来相同的符号一定是一个对象,但是说两个看起来一样的字符串是一个对象,就不对了。

这里,我们用 equal? 方法检验这一点,当两个对象相同时,equal? 返回true,反之是false:

   1.
      >>  :book.equal?(:book)
   2.
      => true
   3.
      >>  "book".equal?("book")
   4.
      => false

处理符号相比字符串,占用更少的资源

这也就是为什么有些时候我们要使用符号的原因,由于字符串变量必须具有各种修改其内容的功能,所以字符串的维护和处理的开销就很大,但是有些时候,我们并不需要修改和处理创建的文本信息,这个时候用符号再好不过了。

比较典型的用法,就是在Rails中,用符号来指代散列中的参数名称:

   1.
      <% for article in @articles -%>
   2.
          <%= link_to article.title,
   3.
                         :controller => "article",
   4.
                         :action      => "show",
   5.
                         :id             => article.id   %>
   6.
      <% end -%>

反之,如果我们把 :controller 写成"controller",把 :action 写成"action",吧 :id 写成"id",每一个循环都要创建3个新的字符对象,但是我们又不需要对这些字符串进行修改操作,白白添加了很多处理器开销,而且写成符号的形式更加简练,可以更容易分别出参数和值,何乐而不为呢。
分享到:
评论

相关推荐

    Ruby常见面试题.pdf

    1. 什么是Ruby?简要介绍Ruby的特点和主要用途。 2. Ruby中的变量声明和赋值规则是什么?请说明Ruby变量声明和赋值的语法。 3. Ruby中常用的数据类型有哪些?请列举几种常见的Ruby数据类型...请说明在Ruby中符号的作用

    基于Ruby符号执行的Metasploit攻击流量提取

    该方法无需搭建靶机环境,可以快速分析Metasploit框架中的攻击脚本,获取其对应的攻击流量,并且标记攻击流量中不同部分的属性,记录攻击状态的转移过程。 Metasploit 是一个使用 Ruby 脚本语言实现的、开源的渗透...

    twemoji:Ruby中的Twitter表情符号

    这个RubyGem twemoji是Ruby中Twitter Emoji的最低实现,因此您也可以在Ruby / Rails应用中使用emoji! 注意:此gem可能未实现JavaScript实现中的所有可用功能。 Twemoji Gem和twemoji.js版本 Twemoji Gem 3.x支持...

    Ruby菜鸟入门指南.md

    3. Ruby中"一切皆对象"的理念,数字、布尔值、类、nil等都是对象。 4. Ruby中"一切皆表达式"的设计,控制语句、方法定义等都会返回值。 5. Ruby中"一切皆方法调用",没有直接访问属性的方式,只有方法调用。 6. 变量...

    Ruby编程语言

     3.6符号71  3.7TRUE、FALSE和NIL72  3.8对象72  第4章表达式和操作符85  4.1字面量和关键字字面量86  4.2变量引用87  4.3常量引用88  4.4方法调用89  4.5赋值92  4.6操作符100  第5章语句和控制结构117 ...

    ruby-emoji-regex::gem_stone:一组用于匹配Unicode Emoji符号的Ruby正则表达式

    Ruby表情符号正则表达式 :gem_stone: 一组Ruby正则表达式,用于匹配Unicode Emoji符号。背景这是基于 Javascript软件包的出色工作。 emoji-regex是根据Unicode联盟的数据巧妙地组合而成的。 本文提供的正则表达式...

    Quicksort(ruby 快速排序)

    一个ruby写的简单快速排序程序,一个快排搞定各种类型数据排序...去掉注释符号“#”,并把随机函数注释掉也可以手动输入数组(注意ruby读取数据是按换行符,手动输入的话每输入一个数就要按一次回车),希望对大家有用

    ruby-tutorial:有关Ruby编程语言的教程。 逐步帮助初学者轻松学习Ruby

    Ruby中的符号是什么? 例子 常用方法 Ruby中的块是什么? 例子 块变量 创建一个数组 索引编制 访问元素 迭代 常用方法 创建范围 迭代 常用方法 创建哈希 通过键访问值 迭代 常见用途 如果 别的 Elsif 除非 案件 ...

    barby, ruby 条码生成器.zip

    barby, ruby 条码生成器 BarbyBarby是一个 ruby 库,它以多种类型生成条码。它的功能分为条码和"输出"对象:[ Barby::Barcode objects] 符号将数据转换为给定符号的二进制表示形式。然后,使用这个表示并将它的转换...

    sith:带有Ruby样板符号的Ruby宏预处理器

    西斯sith是Ruby的宏预处理器 仍然是原型。 例子: 宏定义文件: macro_mapper attr_reader ( label ) def ~ { label } @~ { label } endendmacro_mapper attr_writer ( label ) def ~ { label } = ( value ) @~ { ...

    unicode-emoji:Ruby中的最新Emoji Regex

    Unicode ::表情符号 提供Unicode Emoji数据和正则表达式,并结合了最新的Unicode和Emoji标准。 还包括推荐表情符号的分类列表。 表情符号版本: 13.1 (2020年9月) CLDR版本(用于分区标记): 38.1 (2020年12...

    Ruby中的集合编写指南

    倾向数组及哈希的字面表示法(除非你需要传递参数到它们的构造函数中)。 # bad arr = Array.new hash = Hash.new # good arr = [] hash = {} ... 当你需要一个符号的数组(并且不需要保持 Ruby

    wit-ruby:Wit.ai 的 Ruby 库

    在终端中运行: ruby examples/basic.rb 有关更多示例,请参阅examples文件夹。 应用程序接口 概述 wit-ruby提供了一个具有以下方法的 Wit 类: message - Wit interactive - 与您的机器人开始互动对话 机智班 ...

    emoruby:一种可以编译为 Ruby 的小表情符号语言。 “这只是Ruby。”

    一种将表情符号编译为 Ruby 的小语言。 这只是Ruby。 真的。 语言 如果我是一名真正的语言设计师,我会在 emoruby 的语法、语义和结构上投入大量精力。 相反,我基本上从静态字典中实现了低效的查找和替换。 ( :cow...

    genetics:Ruby 中的遗传编程库

    这是 Ruby 的库。 在人工智能中,遗传编程 (GP) 是一种受生物进化启发的基于进化... (将函数拟合到某些数据,或符号回归。) ant_trail.rb Santa Fe Ant Trail问题的解决方案,教科书GP问题。 蚂蚁和食物的踪迹一

    ruby-snmp:SNMP的Ruby实现(简单网络管理协议)

    它是在纯Ruby中实现的,因此不依赖于像这样的外部库。 您可以在Ruby可以运行的任何地方运行该库。 此版本支持以下内容: GetRequest,GetNextRequest,GetBulkRequest,SetRequest,响应SNMPv1_Trap,SNMPv2_Trap和...

    ruby-warning:添加自定义警告处理

    ruby-warning添加了对警告的自定义处理,包括忽略特定警告消息,忽略特定文件/目录中的警告,包括带有警告的回溯,将警告视为错误,重复数据删除警告以及为特定文件/中的所有警告添加自定义处理的功能。目录。 ...

    aozora-ruby-parser.js:Aozora-bunko ruby​​ 解析器

    因此,本库中只能使用汉字和ASCII范围内的字母和数字,以及全角字母和数字,无需使用ruby起点指示| 。为了兼容一些处理系统,平假名和片假名在没有起点指示的情况下不会分解成ruby | 。有关此解析器保证的输入和...

    Ruby on Rails Web开发之旅.pdf【第二部分】

     3.4 在Ruby中使用面向对象编程  3.4.1 类和对象  3.4.2 对象层功能  3.4.3 类层功能  3.4.4 继承  3.4.5 返回值  3.5 标准输出  3.6 Ruby核心类  3.6.1 数组  3.6.2 散列表  3.6.3 字符串  ...

    Ruby中变量引用时的一些注意点

    在表达式中,当Ruby看到像a这样的名字时,它需要判断a是一个局部变量引用还是对没有参数的方法a的调用。Ruby使用一种启发式的方法来判断这种情况。当Ruby解析源代码文件时,它会记录所有已经被赋值的符号。它认为...

Global site tag (gtag.js) - Google Analytics