我检查:xyz == 'xyz'
是false
。但我们可以使用:index
或'index'
调用rails内的函数。请清除我的疑惑。
答案 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方法就像任何其他方法一样。编写它们的人,以接受false
或Symbol
s的方式编写它们。她本可以将它们写成仅接受String
或仅接受Symbol
s或仅接受String
个星期几,而只接受String
秒的奇数天这一周,在满月期间只有String
,但她决定同时接受Integer
和String
。
编写Rails的开发人员和编写Ruby的开发人员可以随意使用他们想要的方法,就像你可以自由地在你编写的方法中做任何你想做的事情一样。您可以编写一个接受Symbol
的方法,您可以编写一个接受String
的方法,您可以编写一个接受这两个方法的方法,您可以编写一个既不接受也不接受的方法。这是您的选择,就像它是Rails和Ruby开发人员的选择一样。
它绝不意味着Symbol
和Symbol
之间的关系。
答案 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
的实例。