我开始掌握轨道,虽然我觉得我在进步,但有一件事我正在努力掌握,这是非常基本的。我正在尝试了解它们的不同用法[] {}
以及()
它们的用法是否有任何好的来源,是否有任何提示可以给初学者以识别何时使用其中一种,或者我似乎在某些情况下看到它们根本不需要?
我知道这是非常基础的,但我一直在努力寻找能够简明地解释它们与 Ruby 或特别是 RoR 之间相互作用的文献
问问题
414 次
2 回答
4
它与 RoR 无关;各种括号是 Ruby 语言结构。
[]
是数组运算符,用于实现它的数组和其他类(如字符串以范围获取子字符串,或散列以查找键的值):
a = [1, 2, 3]
a.each { |n| puts n }
s = "ohai"
puts s[1..-1]
h = { foo: "bar", baz: "plugh" }
puts h[:foo]
{}
用于散列,并且是两种分隔块的方法之一(另一种是begin
/ end
)。(并用于#
字符串插值。)
h = { foo: "bar", baz: "plugh" }
h.each { |k, v| puts "#{k} == #{v}" }
()
用于方法参数,或用于在表达式中强制执行评估顺序。
> puts 5 * 3 + 5 # Normal precedence has * ahead of +
=> 20
> puts 5 * (3 + 5) # Force 3+5 to be evaluated first
=> 40
def foo(s)
puts(s)
end
如果语句没有歧义,它们有时是可选的:
def foo s
puts s
end
(它们并不总是可选的,在方法调用和它的括号参数列表之间放置一个空格可能会导致问题——最好不要,IMO。)
(我可能也错过了一些东西,但简而言之。)
于 2012-05-12T17:52:31.903 回答
1
[] 用于访问散列(通过键)或数组(通过索引)内的对象。
hash[:key] # returns a value
array[0] # returns the first array element
[] 用于描述数组。
array = ['a', 'b', 'c']
当然这可以嵌套。
nested = [['a','b','c'], [1,2,3]]
[] 可以用来声明散列,但那是因为散列类可以接受一个数组。
hash = Hash[['a',1], ['b',2]] # { 'a' => 1, 'b', => 2 }
{} 用于声明哈希。
hash = { 'a' => 1, 'b' => 2 }
这也可以嵌套。
hash = { 'a' => { 'c' => 3 }, 'b' => { 'd' => 4 } }
{} 也用于分隔块。该.each
方法是一种常见的方法。以下两个代码块是等效的。
array.each do |n|
puts n
end
array.each { |n| puts n }
() 仅用于在需要澄清歧义的情况下进行分组。在采用许多参数的方法中尤其如此,其中一些可能是 nil,其中一些可能是对象等。您会看到很多代码完全省略了它们,因为为了清楚起见不需要分组。
puts(string)
puts string
我建议启动rails console
并开始声明变量并访问它们。
于 2012-05-12T18:01:28.717 回答