2015-04-29 3 views
0

В чем разница между :limit и limit:? Я предполагаю, что первым является метод ограничения размера записи в Ruby on Rails. Для чего нужен второй? Я также не знаю, в чем смысл размещения столбца n с правой стороны.В чем разница между `: limit` и` limit: `?

ответ

1

Возможно, это проблема с хэш-обозначением.

рубин 1,8 и предшествующее использование стиля, как это:

method(:limit => 10) 

Ruby 1.9 и более поздние есть новый стиль, который выглядит как:

method(limit: 10) 

Новое обозначение намного больше похоже, что на других языках, таких как Python и JavaScript. Они функционально идентичны, хотя, как вы можете проверить с irb, где он всегда показывает в условных обозначений:

{ test: 'value' } 
# => { :test => 'value' } 

Что касается вашего вопроса, как к тому, что limit значит, это действительно зависит от того, какой метод вы передаете это в к. В контексте определения схемы он может ограничить размер поля:

t.string limit: 1024 

Если это в контексте запроса может ограничить количество возвращаемых результатов. Каждый метод имеет свою собственную интерпретацию, поэтому вам нужно проконсультироваться с документацией по каждому методу, с которым вы сталкиваетесь.

1

:limit - значение символа типа. Вы можете увидеть больше о символах в документах Ruby. http://ruby-doc.org/core-2.2.2/Symbol.html

limit: является синтаксическим сахаром и может использоваться только как хэш-ключ, когда этот ключ является символом. Пример: { :limit => 10 } - это традиционный способ. После того, как рубин 1.9.3 вы можете переписать, что, как { limit: 10 }

+0

спасибо, я думал, что это не то же самое. – pradeek

-1

переменные, которые имеют двоеточие : до их имя обличает, что они являются символами (уникальный идентификатор), и это означает, что можно сделать следующее:

symbol = :limit 

через двоеточие после имени, как правило, означает для обозначения хэш-ключа, например, следующее:

hash = { limit: 5 } 
puts hash[:limit] # returns 5 

путаница часто наступает при работе с более старыми версиями рубин, где хэши записываются в виде следует:

hash = { :limit => 5 } 
puts hash[:limit] # returns 5 

Что имеет такое же точное значение, как указано выше.

+0

ваши примеры не работают – dx7

+0

': limit = 5' =>' SyntaxError: (irb): 21: синтаксическая ошибка, неожиданный '=', ожидающий конец ввода' – dx7

+0

'puts: limit' =>' limit ' – dx7

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

  • Нет связанных вопросов^_^