编程和Ruby的新手,我希望这个关于符号的问题符合要求。我知道Ruby中的符号(例如,:book、:price)作为散列键特别有用,并且可以全面地执行轻量级的特定子集字符串可以做到。但是,我在一方面对符号感到困惑。具体来说,当它们用于attr_accessor类型的方法时,它们的行为更像是一个变量。例如,attr_reader:book,:price。如果在该用法中它们是变量,这有点令人费解,因为它们通常不在变量类型中列出(如$global、@instance、local、@@class,有时还有CONSTANT,变量类型)描述变量类型时。如果以这种方式使用符号是变量,那么它们的作用域
这个问题在这里已经有了答案:HowtounderstandsymbolsinRuby(11个答案)关闭8年前。我想了解ruby中符号和变量之间的区别。他们在给出一个引用对象的名称时似乎做了完全相同的事情。我已经阅读过这些符号以加快程序速度,但我不确定它们与变量有任何不同的原因或方式。
...如本例所示:helloworld.rb:1:syntaxerror,unexpected'=',expecting$end:helloworld="hello".concat("world")我想如果我使用concat,我会修改字符串“hello”并向其添加“world”,然后最终将生成的字符串-“helloworld”-分配给等号左侧的:helloworld符号符号。我认为那是合法的,就像我写的一样::helloworld="helloworld"哦,等等,那也行不通。(挠头)。 最佳答案 Ruby符号不能赋值,因为它们代表
为什么Ruby公开符号以供显式使用?这不是通常由解释器/编译器处理的那种优化吗? 最佳答案 部分问题在于Ruby字符串是可变的。由于Ruby分配的每个字符串都必须是独立的(它不能缓存短的/常见的),所以使用Symbol类型让程序员拥有本质上不可变的、内存高效的字符串是很方便的。此外,它们与enum有许多共同特征,但对程序员来说痛苦较少。 关于ruby-为什么Ruby公开符号?,我们在StackOverflow上找到一个类似的问题: https://stacko
我在研究对象ID后发现了这一点。ObjectSpace._id2ref(2648)=>:**ObjectSpace._id2ref(6688)=>:**ObjectSpace._id2ref(2648)==ObjectSpace._id2ref(6688)=>false第一个是求幂运算符;2.send(ObjectSpace._id2ref(2648),3)=>82.send(ObjectSpace._id2ref(6688),3)NoMethodError:undefinedmethod`**'for2:Fixnum但第二个不知何故不是?我假设它们在传递给#print后看起来是一样的
我正在为电影名称存储创建一个Ruby哈希。当散列的键是包含空格的字符串时,它工作得很好。如:movies={"阿凡达"=>5,"指环王"=>4,"教父"=>4}现在我正在尝试用符号替换字符串的使用:movies={阿凡达:5,指环王:4,教父:4}显然那是行不通的。Ruby如何处理符号命名中的空格? 最佳答案 自己试试"Lordoftherings".to_sym#=>:"Lordoftherings" 关于ruby-如何从包含空格的字符串创建符号?,我们在StackOverflow上找
我有这个散列:{"title"=>"Navytoplacebreath-testmachinesonallitsships","url"=>"http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49"}事实证明hash[:url]==nil和hash['url']=="http://feeds.washingtonpost.com/click.phdo?i=a67626ca64a9f1766b8ba425b9482d49"为什么?它不应该与两者一起工作吗? 最佳
我有一个路径为/foo/bar/gazook/script.rb的Ruby脚本。我还在$HOME/bin中创建了指向它的符号链接(symboliclink)。现在,我希望我的Ruby脚本访问目录/foo中的一些其他文件,并保持路径相对,我有一个变量FOO_DIRECTORY=File.expand_path(File.dirname(__FILE__)+"/../../")在我的脚本中。问题是,如果我从它的符号链接(symboliclink)运行我的脚本,这个相对目录是错误的(因为我猜它是从不同的位置扩展的)。我该如何解决这个问题?除了使用绝对路径还有其他方法吗?
我正在学习Rails并回到Ruby以了解Rails中的方法(以及Ruby的实际工作原理)。当我看到如下方法调用时:validates:first_name,:presence=>true我很困惑。您如何在ruby中编写接受符号或散列的方法。validates方法的源代码也很困惑。有人可以为我简化在ruby类和实例方法中使用符号作为参数的主题吗?更新:好一个@Dave!但我尝试的是这样的:deffull_name(:first_name,:last_name)@first_name=:first_name@last_name=:last_namep"#{@first_name}#
我第一次尝试学习Ruby是在2年前,现在我又重新开始了。我停下来的原因是因为我无法理解Symbol类。现在我又在同一点上,完全迷失在何时以及为何使用Symbols。我已经阅读了Stackoverflow上的其他帖子,并通过Google搜索了一些解释。但是我还不明白。首先,我认为符号只是一种创建某种“命名常量”的方法,而无需经历与Java中相同的过程。:all而不是创建一个具有任意值的常量publicstaticfinalStringALL=8;但是,当您在例如使用它时,它并没有多大意义。attr_accessor:first_name等Symbols只是一个轻量级的String类吗?我