带有=>和的散列有什么区别:

我使用了一个特定的库,我可以在其中传递具有此类哈希值的变量:

{ 'username' = > 'John'}

但是当我尝试使用这样的哈希传递变量时:

{ 'username': 'John' }

它不起作用。我一直认为=>是旧语法,:但似乎确实有所不同。

使用它的代码: Liquid::Template.parse(template).render!(variables).html_safe

你能解释一下区别并告诉我如何将这样的散列转换{ 'username': 'John' }为这个{ 'username' = > 'John'}演示文稿吗?

回答

{ some_arbitrary_expression(some_argument, arg2) => another_arbitrary_expression(arg) }

是文字的通用语法Hash任何响应hasheql?可以用作Hash.

{ some_valid_symbol: arbitrary_expression(arg1, arg2) }

是键的“新式”Hash字面语法Symbol

我一直认为=>是旧语法,:但似乎确实有所不同。

我不确定你在哪里学过这个,但我肯定想知道这样我可以警告其他人这个来源。它从来都不是真的,目前没有计划让它成为真的,而且它可能永远不会是真的。据我所知,官方文档、RubySpec 或任何著名的书籍(The Ruby Programming Language、Programming Ruby)中都没有任何说明。

你能解释一下区别并告诉我如何将这样的散列转换{ 'username': 'John' }为这个{ 'username' = > 'John'}演示文稿吗?

您可以通过monkey-patching或来更改 a 的String表示,但尚不清楚这会给您带来什么。HashHash#to_sHash#inspect

如果您使用的方法需要一个Hash其键为Strings 的方法,而您将其传递给一个Hash键为Symbols 的方法,那么更改 的String表示Hash不会对您有所帮助。您需要修复源并确保您的密钥是Strings。


以上是带有=>和的散列有什么区别:的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>