带有=>和的散列有什么区别:
我使用了一个特定的库,我可以在其中传递具有此类哈希值的变量:
{ '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。任何响应hash并eql?可以用作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。