我希望得到关于符号看起来如何(以及为什么)更改类型的明确答案。
我了解到以冒号结尾的符号是声明符号的替代语法,通常用于填充哈希值。
Koan编号124通过执行以下操作为我的(非)理解增加了更多的模糊性:
def method_with_keyword_arguments(one: 1, two: 'two')
[one, two]
end
本页:
http://chriszetter.com/blog/2012/11/02/keyword-arguments-in-ruby-2-dot-0/
说Keyword arguments in the method definition must be symbols given in the new-style hash syntax
然后在方法参数中看起来像符号的是返回数组中的方法变量。
符号可以更改'键入'甚至没有被方法改变?或者,在这种情况下,是否有一种方法我没有看到它改变了类型?如果类型不重要,为什么它似乎会改变?或者可以在没有冒号的情况下引用符号?
如果我对此有任何不妥之处,请随时纠正我,让我知道实际发生了什么!感谢。
答案 0 :(得分:2)
不,符号无法自行更改,但是当您在示例中使用one
或two
时,您正在使用变量具有相似名称,由Ruby根据您的方法定义提供,不是符号本身。
考虑哈希:当你有一个哈希a = { one: 1, two: '1234' }
而你写a[:one]
时,你不会得到一个符号,而是一个合适的值。因此,:one
仍然是一个符号,但使用[a[:one], a[:two]]
,您将得到[1, '1234']
数组,而不是[:one, :two]
。
答案 1 :(得分:0)
这里没有符号。 one
和two
是参数,参数成为方法体中的局部变量变量。
在
def foo(bar:, baz:)
bar
和baz
不再是
def foo(bar, baz)
在第一种情况下,它们是关键字参数,在第二种情况下它们是位置参数,除此之外,没有区别。在参数列表中,它们是参数占位符,在方法体中,它们成为绑定到参数的局部变量。