Ruby:结肠前后vs

Flo*_*ock 74 ruby

使用Ruby时,我总是和它混在一起:.

当有人在变量名称之前使用它时,有人可以解释一下吗:name,当我想在变量之后使用它时name:

一个例子是崇高的.

Aru*_*hit 44

我们欢迎您,同时创建Hash:

{:name => "foo"}
#or
{name: 'foo'} # This is allowed since Ruby 1.9
Run Code Online (Sandbox Code Playgroud)

但基本上:nameSymbolRuby中的一个对象.

来自docs

当您的键始终是符号时,哈希允许使用替代语法形式.代替

options = { :font_size => 10, :font_family => "Arial" }
Run Code Online (Sandbox Code Playgroud)

你可以把它写成:

options = { font_size: 10, font_family: "Arial" }
Run Code Online (Sandbox Code Playgroud)

  • JavaScript样式表示法要求符号为[有效标签](http://stackoverflow.com/a/9694676/479863),因此您不能将它与各种有效符号一起使用,例如`:$ set`(非常常见)使用MongoDB),`:'煎饼屋在哪里?',`:[]`,`:@ x`,... (3认同)
  • 不,这只是我的红宝石宠物.这一直是Matz对Ruby所做的最令人困惑的事情:( (2认同)
  • Arup,请将你的评论地址澄清到@muistooshort.哪个海?加勒比海最大深度为6,946米,亚速海仅为14米. (2认同)
  • @dlu,我想这取决于Arup对"海"的意思.如果他的意思是世界海洋,马里亚纳海沟就是合适的; 如果他的意思是被认为是海洋的水体(并且通常在他们的名字中有"海"),那就是加勒比海.无论如何,我们同意mu太短是一个非常深刻的思想家. (2认同)

Jör*_*tag 41

这与变量完全无关.

:fooSymbol文字,就像'foo'是一个String直译和42Integer文字.

foo: 用于三个地方:

  • 作为Symbol文字的替代语法作为文字的关键Hash:{ foo: 42 } # the same as { :foo => 42 }
  • 在用于声明关键字参数的参数列表中: def foo(bar:) end
  • 在用于传递关键字参数的参数列表中: foo(bar: 42)

  • 这一行'作为一个替代语法的符号文字作为哈希文字的关键:{foo:42}#与{:foo => 42}相同'删除了我的所有问题.谢谢. (2认同)
  • @DanDascalescu:这是一个消息发送,有两个参数,'发送消息`observe`为`self`:post_action`和`:post_revision`. (2认同)

Chu*_*uck 10

:name是一个象征.name: "Bob"是一种特殊的简写语法,用于定义哈希,其中符号:name为键,字符串"Bob"为值,否则将写为{ :name => "Bob" }.