Ruby koan 124 - 这些符号是否会自发地改变类型?

时间:2015-01-09 09:29:20

标签: ruby

我希望得到关于符号看起来如何(以及为什么)更改类型的明确答案。

我了解到以冒号结尾的符号是声明符号的替代语法,通常用于填充哈希值。

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然后在方法参数中看起来像符号的是返回数组中的方法变量。

符号可以更改'键入'甚至没有被方法改变?或者,在这种情况下,是否有一种方法我没有看到它改变了类型?如果类型不重要,为什么它似乎会改变?或者可以在没有冒号的情况下引用符号?

如果我对此有任何不妥之处,请随时纠正我,让我知道实际发生了什么!感谢。

2 个答案:

答案 0 :(得分:2)

不,符号无法自行更改,但是当您在示例中使用onetwo时,您正在使用变量具有相似名称,由Ruby根据您的方法定义提供,不是符号本身

考虑哈希:当你有一个哈希a = { one: 1, two: '1234' }而你写a[:one]时,你不会得到一个符号,而是一个合适的值。因此,:one仍然是一个符号,但使用[a[:one], a[:two]],您将得到[1, '1234']数组,而不是[:one, :two]

答案 1 :(得分:0)

这里没有符号。 onetwo是参数,参数成为方法体中的局部变量变量。

def foo(bar:, baz:)

barbaz不再是

中的符号
def foo(bar, baz)

在第一种情况下,它们是关键字参数,在第二种情况下它们是位置参数,除此之外,没有区别。在参数列表中,它们是参数占位符,在方法体中,它们成为绑定到参数的局部变量。