符号有什么区别?

时间:2017-11-01 09:22:16

标签: ruby-on-rails ruby

我检查:xyz == 'xyz'false。但我们可以使用:index'index'调用rails内的函数。请清除我的疑惑。

5 个答案:

答案 0 :(得分:4)

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"></div>:xyz确实不同。这与一个方法可以采用任何一种参数的事实都不矛盾。例如,'xyz'可以将Array#*String作为参数:

Integer

但这并不意味着["a", "b"] * "foo" # => "afoob" ["a", "b"] * 2 # => ["a", "b", "a", "b"] "foo"相同。

如果你遵循你所暗示的逻辑,那就意味着Ruby中的所有对象都是相同的。

答案 1 :(得分:3)

  

我检查<span>{{ Carbon::createFromTimeStamp(strtotime($message->created_at))->diffForHumans()}}</span> :xyz == 'xyz'。但我们可以使用false:index调用rails内的函数。请清除我的疑惑。

这没有什么神秘之处。

'index'就像任何其他方法一样。写这篇文章的人写的是它返回Symbol#==的方式。她可以写它来返回false或返回true或格式化你的硬盘,但她决定返回42

Rails方法就像任何其他方法一样。编写它们的人,以接受falseSymbol s的方式编写它们。她本可以将它们写成仅接受String或仅接受Symbol s或仅接受String个星期几,而只接受String秒的奇数天这一周,在满月期间只有String,但她决定同时接受IntegerString

编写Rails的开发人员和编写Ruby的开发人员可以随意使用他们想要的方法,就像你可以自由地在你编写的方法中做任何你想做的事情一样。您可以编写一个接受Symbol的方法,您可以编写一个接受String的方法,您可以编写一个接受这两个方法的方法,您可以编写一个既不接受也不接受的方法。这是您的选择,就像它是Rails和Ruby开发人员的选择一样。

它绝不意味着SymbolSymbol之间的关系。

答案 2 :(得分:2)

我的猜测是你遇到了Rails&#39;使用HashWithIndifferentAccess。这允许您使用符号或字符串访问哈希。

换句话说,params[:a]params["a"]相同,因为在内部,HashWithIndifferentAccess会将所有键转换为字符串。

有关详细信息,请参阅documentation

答案 3 :(得分:1)

参考http://www.reactive.io/tips/2009/01/11/the-difference-between-ruby-symbols-and-strings清楚地解释字符串与符号。 特别是字符串和符号性能解释了为什么符号用于字符串

答案 4 :(得分:0)

:xyz是一个符号。符号是类Symbol的实例。

"xyz&#34;是一个字符串。字符串不是符号。

因此,:xyz=='xyz'不是真的。因为Symbol的实例:xyz不等同于字符串xyz的实例。