2012-05-12 3 views
0

Я собираюсь захватить рельсы, и пока я чувствую, что я прогрессирую, есть одна вещь, с которой я изо всех сил пытаюсь справиться, и это очень просто. Я пытаюсь понять различное использование [] {} и () Есть ли хорошие источники их использования, и есть ли какие-либо советы, которые вы можете дать новичкам в распознавании, когда использовать тот или иной, или, как я, кажется, вижу в некоторых случаях когда они вообще не требуются?
Я знаю, что это чрезвычайно просто, но я изо всех сил старался найти литературу, в которой кратко объясняется взаимодействие между ними и Ruby или, в частности, RoRRoR различный кронштейн обозначение

ответ

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 

(Они не всегда необязательные, и положить пространство между вызовом метода и списком параметров могут в скобках вызвать проблемы - лучше не ИМО)

(я, вероятно, что-то пропустил, тоже, но это скорлупа)

.. 0
+0

+1 Я полностью забыл об использовании {} в качестве разделителя блоков. – Ron

+1

Я так благодарен за это. Это прояснило для меня вещи в впечатляюще сжатом виде. Очень признателен! – Tom

+0

@Tom Нет пота; эту информацию можно найти в большинстве руководств Ruby, но не обязательно все в одном месте. Я должен добавить, что в RoR это в основном шаблоны ERb, где вам иногда нужно быть осторожными при использовании помощников, чтобы избежать синтаксических ошибок - легко получить немного неаккуратно. –

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 = 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 } 

The() используется только для группировки в случаях, когда неопределенность нуждается в разъяснении. Это особенно верно в методах, которые принимают много аргументов, некоторые из которых могут быть ноль, некоторые из которых могут быть obejcts и т. Д. Вы увидите много кода, которые полностью опускают их, поскольку для ясности не требуется группировка.

puts(string) 
puts string 

Я рекомендую стрельбу до rails console и начать объявление переменных и доступ к ним.

+0

Число аргументов в вызове метода на самом деле не является причиной двусмысленности, когда параметр является вызовом метода и т. Д., Когда нужно использовать парсеры, чтобы сделать лексер счастливым. –

+0

Большое спасибо, особенно информация о массиве и вложенности хешей. – Tom

Смежные вопросы