尽管阅读了" 理解Ruby符号 ",但在使用符号时,我仍然对内存中数据的表示感到困惑.如果一个符号(其中两个包含在不同的对象中)存在于同一个内存位置,那么它们如何包含不同的值?我原本期望相同的内存位置包含相同的值.
这是来自链接的引用:
与字符串不同,同名的符号在ruby会话期间初始化并仅存在于内存中一次
我不明白它如何设法区分同一内存位置中包含的值.
考虑这个例子:
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
Run Code Online (Sandbox Code Playgroud)
patient1并且patient2都是哈希,这很好. :ruby然而是一个象征.如果我们要输出以下内容:
patient1.each_key {|key| puts key.to_s}
Run Code Online (Sandbox Code Playgroud)
然后将输出什么?"red",还是"programming"?
忘记哈希一秒钟,我认为符号是一个指向值的指针.我的问题是:
我试图理解符号和红宝石中的变量之间的区别.在给出引用对象的名称时,它们似乎完全相同.
我已经读过这些符号可用于更快的程序,但我不确定它们为什么或如何以任何方式与变量不同.
当我查看 Vagrant 文档https://www.vagrantup.com/docs/networking/forwarded_ports.html 时,它给出了这样的示例:
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "tcp"
config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "udp"
end
Run Code Online (Sandbox Code Playgroud)
但是,以下内容似乎也有效:
单引号
Vagrant.configure("2") do |config|
config.vm.network 'forwarded_port', guest: 2003, host: 12003, protocol: "tcp"
config.vm.network 'forwarded_port', guest: 2003, host: 12003, protocol: "udp"
end
Run Code Online (Sandbox Code Playgroud)
冒号前缀
Vagrant.configure("2") do |config|
config.vm.network :forwarded_port, guest: 2003, host: 12003, protocol: "tcp"
config.vm.network :forwarded_port, guest: 2003, host: 12003, protocol: "udp"
end
Run Code Online (Sandbox Code Playgroud)
这些语法有什么区别?只有当您有像 puppet这样的变量时才应该使用双引号吗?
什么是冒号前缀语法?这是令人困惑的,因为该行中的其余关键字都带有冒号后缀。
Vagranfiles 有风格指南吗?
可能重复:
了解Ruby中的符号Ruby
中的冒号运算符是什么?
我真的觉得这很天真,但我会继续问:
:红宝石的重要性是什么?
我已经看到它被用于许多类似params[:id]或类似的地方x < :length.
在将此标记为" Ruby中的冒号操作符是什么? " 的副本之前,请先阅读问题(只是先发制人).我不是在询问冒号究竟做了什么.
我最近试图想出一个聪明的解决方案" 将字符串转换为符号/关键字 ".我的第一个想法是为String类重载冒号运算符,就像Ruby +对String上的方法一样(我知道这样做的潜在缺点).但我发现它:不仅仅是String的可重载运算符.
Google对"ruby运算符" 的第一个结果并未将冒号显示为运算符.我找不到任何声称它是运营商的消息来源.我想它会与hashrocket(=>)属于同一类别,但我不知道你会称之为什么.
那么这个特殊的冒号字符被归类为什么?你能指出它在Ruby源中的定义,它可能会被改变吗?
可能重复:
了解Ruby中的符号Ruby
中的冒号运算符是什么?
这是我正在阅读的Rails教程给出的一些代码.
class Post < ActiveRecord::Base
attr_accessible :content, :name, :title
validates :name, :presence => true
validates :title, :presence => true,
:length => { :minimum => 5 }
end
Run Code Online (Sandbox Code Playgroud)
什么:content,:name和:title是什么意思?我依旧记得这些来自我正在阅读的红宝石教程(hlrb),但是当我浏览它时我找不到它们.这些单词以冒号为前缀是什么意思?