两者之间的区别是什么:something=>;真的吗?在Ruby中是真的吗?

两者之间的区别是什么:something=>;真的吗?在Ruby中是真的吗?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个选择的Capabara方法: page.should have_selector("#jFooterStandardLinks", :visible => true) 还可以提供如下选项: page.should have_selector("#jFooterStandardLinks", visible: true) 这两种方法都可以工作,但我在EclipseIDE中遇到了一个错误 :visible=>true和visible:true之间有什么区别 是否可见:仍被解释为红

我有一个选择的Capabara方法:

page.should have_selector("#jFooterStandardLinks", :visible => true)
还可以提供如下选项:

page.should have_selector("#jFooterStandardLinks", visible: true)
这两种方法都可以工作,但我在EclipseIDE中遇到了一个错误

  • :visible=>true
    visible:true
    之间有什么区别
  • 是否可见:
    仍被解释为红宝石符号

    • 没有区别
      symbol:value
      :symbol=>value
      的别名,只是第一个与ruby 1.8不兼容。

      没有区别。Ruby接受
      key:value
      hash语法,而键是符号。因此

      x_method @blah, some_key: 'asdf', another_key: 3, yet_a_key: true # is equivalent to:
      x_method(@blah, {:some_key => 'adsf', :another_key => 3, :yet_a_key => true })
      

      正如@ckruse所指出的,第一种语法在ruby 1.8.7中不可用。

      唯一的区别是从ruby 1.8x到1.9x的转换。现在它仍然是完全相同的,但可能是:visible=>true最终会被弃用,取而代之的是visible:true

      新的语法稍微简单明了,与JSON更为相似

      关于你的第二个问题,我发现了一句很好的话:

      新的符号是最常见的散列形式的一种语法糖,即所谓的符号到对象散列。如果您在irb中这样做,您将看到ruby返回旧式散列,其中的符号用作键:

      如果您需要将任意对象作为哈希键,您仍然需要按照传统方式进行操作


      来源:

      在这种情况下,没有区别,是的,它是一个符号。它是Ruby 1。如果您在Eclipse中遇到错误,很可能您没有将Ruby语言级别设置为1.9。请注意,在
      irb
      中进行一些简单的测试可能已经回答了关于这两个哈希语法的基本问题。不,它不会被弃用。那怎么行呢?你在哪里听到的?这从来都不是计划,甚至不可能做到。可能性不大,但理论上是可以做到的。不过,这是另一个讨论。Ruby1.9发布后引起了一些兴趣,这篇文章也引起了一些谣言。没有什么实质性的东西,在不久的将来也不会。intarwebz上随机出现的不知名的家伙的博客文章不会被贬低。matz的官方声明和ChangeLog中的条目不适用。无论如何,hashrocket语法不能因为冒号语法而被弃用,因为冒号语法不是替代品。它只适用于hashrocket语法有效的极少数情况。
      new_hash = {simon: "Talek", lorem: "Ipsum"}
      # => {:simon=>"Talek", :lorem=>"Ipsum"}