爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
当前所在位置:主页 > 脚本 > ruby专题 >
  • 魔艺客提供SEO\SEM推广整合营销服务
  • 提供整套互联网营销整合方案-魔艺客
  • 魔艺客高端网站建设开发服务十一大优惠服务
  • 资深的网站建设开发经验,一对一服务-魔艺客高
  • 一站式服务,从服务器到网站,三站何以尽在魔
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

比较详细的ruby symbol 学习资料

发布时间:2017-09-08 17:21    作者:爱开发联盟    浏览:次    来源:aikaifa.com.cn 分享:

解释的不错,应该明确了不少 
ruby symbol详解
起因
最近在学习ruby on rails,的确是一个优秀的数据库开发框架。但在过程中,发现在视图文件夹中的rhtml文件里有大量的类似于以下的语句:
<td><%= link_to recipe.title, :action => “show”, :id => 1 %></td>
这是一个指向链接,如果没有冒号这句话的意思很好理解:这是一个指向http://127.0.0.1:3000/recipe/show/1的连接,也就是“显示”数据库表recipe中“id”为1的条目的信息,但让人不解的是action和id前面的冒号,它们是干甚么用的? 

ruby面向对象特性的一个缺点
ruby中,一切皆是对象。就一个简单的字符串举例:
ruby -e ‘puts “hello world”.class'
String
这里打印了”hello world”的字符串所属的类,结果显示它是一个String对象的实例。我们还可以显示它的对象号。
ruby -e ‘puts “hello world”.object_id'
41436168
ruby一向标榜自己是完全的面向对象的原因就在于此,它的确做的很彻底。但是凡事有好就有坏,一个对象占用的内存空间显然会比纯粹的变量大得多,当程序中涉及到大量的字符串时,一个ruby程序会占用过多的内存。举个例子说:
我们用hash列表来存储歌曲的信息
song1 = { ‘title' => ‘used to love you', ‘artist' => ‘john legend'}
song2 = { ‘title' => ‘i still', ‘artist' => ‘backstreet boys'}
#……
#很多歌,这里只用两首
for i in 1..2
 thesong=”song”+i.to_s
 eval <<-PROC
 #{thesong}.each_key { |key| puts key.object_id.to_s }
 PROC
end
结果:
41436144
41436408
41435904
41436000
因为object_id各不相同,在hash表中的各个key都是独立的String对象,即使内容相同(如'title'),ruby还是将其视为不同的对象,这样就无端地占用了不少内存。但事实上,大多数情况下,我们仅将hash中的key视为字段而已,不会涉及到String类的方法,ruby自动将其设置为对象有杀鸡用牛刀之嫌。 

symbol是什么
直译来说就是“符号”,在ruby就是形如:action这样的,一个冒号后跟一段字符串。显然,根据“一切都是对象”定律,它也是一个对象。
ruby -e ‘ puts :action.class ‘
Symbol
这个对象存在的意义在于,它解决了“同内容字符串,不同对象”带来的过多占用内存的问题。简单的说:action代表了'action'字符串,这里说的是字符串,不是字符串对象。
ruby -e ‘ puts :action ‘
action
更确切的讲就是一个symbol对象代表该对象的冒号后的字符串。
ruby -e ‘ puts :action ‘
action
ruby -e ‘ puts :”hello world” ‘ 
hello world
所有同内容的字符串只需要一个标记对象就可以代替,这样减少了不必要的对象建立和内存占用。但是,正如我强调的“symbol代表的是字符串,不是对象”,因此不要希望标记可以使用String类的诸如capitalize,center等方法,如果使用的话只会得到提示方法未定义的错误报告:
ruby -e ‘ puts :action.capitalize ‘ 
-e:1: undefined method ‘capitalize' for :action:Symbol' (NoMethodError)
幸运的是,symbol提供了转换函数to_s用来生成一个字符串对象,它会提取字符串内容并将其升级为对象。
ruby -e ‘ puts :action.to_s.capitalize ‘ 
Action
另外,很重要的一点是,symbol没有赋值方法,换句话说symbol一旦定义,将不能改变。
ruby -e ‘ :action=”hello” ‘ 
syntax error
很遗憾,即使使用了to_s,赋值依然无法顺利进行,因为ruby会认为“to_s=”是一个未定义函数。除非明确地为被转换生成的字符串对象指定一个引用(但事实上在复制之后该连接的指向又发生了变化):
:action
myaction=:action.to_s
myaction=”lala”
puts myaction
结果:
lala
怎么使用symbol
任何可以使用symbol的地方都可以使用与之向对应的字符串对象。在rails中有建立类似javabean的方法:
attr_reader :action
它建立了一个读取实例变量@action的方法,也可以写成这样:
attr_reader “action”
反之,只要
字符串在程序运行过程中不用改变
字符串不必使用String类方法
那么我们可以放心用symbol来代替字符串对象,从而大大减少内存的占用,在rails中尤为明显。因为需要频繁地在各个控制方法和页面之间跳转和传出数据,大量的方法名由symbol来代替,及节约了内存也提高了运行速度。

网友评论

分类排行榜联系我们

好文推荐联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

当前最新内容联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

在线手册

网站地图导航

前端 HTML/Xhtml HTML5 CSS XML/XSLT Dreamweaver教程 Frontpage教程 心得技巧 编程 JavaScript ASP.NET PHP编程 正则表达式 AJAX相关 ASP编程 JSP编程 Flex 脚本加解密 web2.0 XML/RSS 网页编辑器 相关技巧 安全相关 网页播放器 Dart 其它综合 脚本 VBS DOS/BAT HTA HTC Python perl 游戏相关 vba 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 脚本下载 广告代码 js框架 批处理 网页相关 源码下载 数据库 MsSql Mysql mariadb oracle DB2 mssql2008 mssql2005 SQLite PostgreSQL MongoDB Redis Access 数据库文摘 数据库其它 CMS dedecms ecshop z-blog UcHome UCenter 风讯CMS 科汛cms discuz 新云cms phpwind 动易cms phpcms 帝国cms WordPress drupal 其它cms 设计 photoshop教程 摄影教程 Fireworks教程 CorelDraw教程 Illustrator教程 Painter教程 Freehand教程 Indesign 设计素材 平面其它 微信相关 微信公众号 小程序 操作系统 bios 系统安装 系统进程 Windows系列 LINUX RedHat/Centos Ubuntu/Debian Fedora Solaris 麒麟系统 红旗Linux Unix/BSD 苹果MAC 注册表 其它系统 网站运营 建站经验 微信营销 网站优化 网站策划 网络赚钱 网络创业 站长故事 alexa域名 其它相关 网络安全 黑客教程 安全设置 杀毒防毒 病毒查杀 脚本攻防 黑客入侵 工具使用 业界动态 Exploit 漏洞分析 加密解密 手机黑客 安全其它 在线手册 网页制作 脚本编程 数据库相关 软件编程 系统相关 其它相关 源码下载

友情链接申请加入

51CTO 上海魔艺客 猫鼬设计开发 Erlo网站开发 猫鼬设计工作室 新发现全球资讯 信息安全与IT资讯
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

283882409