Ruby koan 124 - 这些符号会自发地改变类型吗?
Ruby koan 124 - Are these symbols spontaneously changing type?
我想得到关于符号如何(以及为什么)会改变类型的明确答案。
我了解到以冒号结尾的符号是声明符号的替代语法,通常用于填充哈希值。
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
但随后在方法参数中出现的符号是返回数组中的方法变量。
符号是否可以更改 'type' 而无需通过方法进行更改?或者,在这种情况下,是否有一种我没有看到的方法正在改变类型?如果类型无关紧要,为什么它看起来会发生变化?或者可以不用冒号引用符号吗?
如果我有任何错误,请随时纠正我,让我知道到底发生了什么!谢谢
不,符号不能自行更改类型,但是当您在示例中使用 one
或 two
时,您正在使用具有相似名称的变量,由 Ruby 根据您的方法定义提供,而不是符号本身。
考虑一个散列:当你有一个散列 a = { one: 1, two: '1234' }
并且你写 a[:one]
你没有得到一个符号,而是一个合适的值。所以 :one
仍然是一个符号,但是使用 [a[:one], a[:two]]
你会得到 [1, '1234']
数组,而不是 [:one, :two]
.
这里没有符号。 one
和two
是参数,参数在方法体中成为局部变量
在
def foo(bar:, baz:)
bar
和 baz
不再是
中的符号
def foo(bar, baz)
第一种情况是关键字参数,第二种情况是位置参数,除此之外没有区别。在参数列表中,它们是参数占位符,在方法体中,它们成为绑定参数的局部变量。
我想得到关于符号如何(以及为什么)会改变类型的明确答案。
我了解到以冒号结尾的符号是声明符号的替代语法,通常用于填充哈希值。
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
但随后在方法参数中出现的符号是返回数组中的方法变量。
符号是否可以更改 'type' 而无需通过方法进行更改?或者,在这种情况下,是否有一种我没有看到的方法正在改变类型?如果类型无关紧要,为什么它看起来会发生变化?或者可以不用冒号引用符号吗?
如果我有任何错误,请随时纠正我,让我知道到底发生了什么!谢谢
不,符号不能自行更改类型,但是当您在示例中使用 one
或 two
时,您正在使用具有相似名称的变量,由 Ruby 根据您的方法定义提供,而不是符号本身。
考虑一个散列:当你有一个散列 a = { one: 1, two: '1234' }
并且你写 a[:one]
你没有得到一个符号,而是一个合适的值。所以 :one
仍然是一个符号,但是使用 [a[:one], a[:two]]
你会得到 [1, '1234']
数组,而不是 [:one, :two]
.
这里没有符号。 one
和two
是参数,参数在方法体中成为局部变量
在
def foo(bar:, baz:)
bar
和 baz
不再是
def foo(bar, baz)
第一种情况是关键字参数,第二种情况是位置参数,除此之外没有区别。在参数列表中,它们是参数占位符,在方法体中,它们成为绑定参数的局部变量。