Почему там столько немного отличающихся способов сделать то же самое в Ruby?

  • ctrl + сдвиг + K удаляет текущую строку
  • ctrl + , сдвиг + J объединяет текущую строку со следующей строкой
11
задан Andrew Grimm 14 September 2011 в 01:10
поделиться

8 ответов

Зачем мне вообще использовать неинтерполированные строки?

Если, конечно, вам не нужна интерполяция. Например, возможно, вы выводите некоторую документацию по интерполяции строк:

'Use #{x} to interpolate the value of x.'
=> "Use #{x} to interpolate the value of x."

Какое преимущество имеет синтаксис% над литералами в кавычках?

Он позволяет писать строки более естественно, без кавычек или когда вы не хотите чтобы избежать многих вещей, аналогично префиксу строкового литерала в C # @ .

%{The % syntax make strings look more "natural".}
=> "The % syntax makes strings look more \"natural\"."

%{<basket size="50">}
=> "<basket size=\"50\">"

Есть много других% -обозначений:

%w{apple banana #{1}cucumber}   # [w]hitespace-separated array, no interpolation
=> ["apple", "banana", "\#{1}cucumber"]

%W{apple banana #{1}cucumber}   # [W]hitespace-separated array with interpolation
=> ["apple", "banana", "1cucumber"]

# [r]egular expression (finds all unary primes)
%r{^1?$|^(11+?)\1+$}
=> /^1?$|^(11+?)\1+$/

(1..30).to_a.select{ |i| ("1" * i) !~ %r{^1?$|^(11+?)\1+$} }
=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

%x{ruby --version} # [s]hell command
=> "ruby 1.9.1p129 (2009-05-12 revision 23412) [x86_64-linux]\n"

Также есть % s (для символов) и некоторые другие.

Почему существует пять способов создания строковых литералов?

В этом нет ничего необычного. Рассмотрим, например, C #, в котором есть несколько различных способов создания строк: new String () ; "" ; @ "" ;

15
ответ дан 3 December 2019 в 04:52
поделиться

По строкам ответа Джона: В быстрых взломах я часто запускаю однострочный perl или sed с синтаксисом grep из моего скрипта ruby. Возможность использовать синтаксис типа % [] означает, что я могу просто скопировать и вставить свое регулярное выражение с терминала

0
ответ дан 3 December 2019 в 04:52
поделиться

Я не эксперт по Ruby, но слышали ли вы когда-нибудь термин «синтаксический сахар»? Обычно некоторые языки программирования предлагают разный синтаксис для выполнения одной и той же задачи. Некоторые люди могли найти один способ проще, чем другие, из-за его предыдущего опыта программирования / синтаксиса.

3
ответ дан 3 December 2019 в 04:52
поделиться

В большинстве случаев вы будете использовать обычные разделители строк. Основное различие между одинарными и двойными кавычками заключается в том, что двойные кавычки позволяют вам интерполировать переменные.

puts 'this is a string'
# => this is a string
puts "this is a string"
# => this is a string
v = "string"
puts 'this is a #{v}'
# => this is a #{v}
puts "this is a #{v}"
# => this is a string

% q и % Q полезны, когда вы не можете использовать кавычки, потому что они являются частью внутренняя строка. Например, вы можете написать

html = %Q{this is a <img src="#{img_path}" class="style" /> image tag}

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

2
ответ дан 3 December 2019 в 04:52
поделиться

Вы должны использовать неинтерполированные строки, если ваша строка содержит много специальных символов (например, обратную косую черту, # {} и т. Д.), И вы не хотите экранировать их все.

Вы бы использовали разные разделители, если ваша строка содержит много кавычек, которые в противном случае вам пришлось бы избегать.

Вы бы использовали heredocs, если в ваших строках много строк, из-за чего обычный строковый синтаксис выглядел бы громоздким.

0
ответ дан 3 December 2019 в 04:52
поделиться

Большая часть синтаксиса Ruby заимствована из Perl, например, использование q для цитирования нескольких слов в строку. Наверное, это основная причина такого большого разнообразия.

1
ответ дан 3 December 2019 в 04:52
поделиться

Ruby заимствует конструкции и идеи из множества языков. Двумя наиболее очевидными влияниями являются Smalltalk и Perl.

В зависимости от вашего опыта работы с Smalltalk или Perl вы вполне можете выбрать разные конструкции для выполнения одного и того же действия.

0
ответ дан 3 December 2019 в 04:52
поделиться

Еще одна причина - небольшое повышение производительности для неинтерполированных строк. Использование '' vs "" означает, что Ruby вообще не должен учитывать, что находится внутри строки. Таким образом, вы увидите, как люди используют одинарные кавычки для ключей или символов массива, потому что они быстрее. На всякий случай я включу небольшой тест.

require 'benchmark'

Benchmark.bmbm(10) do |x|  
  x.report("single-quote") do
    for z in 0..1000000
      zf = 'hello'
    end
  end  

  x.report("double-quote") do
    for z in 0..1000000
      zf = "hello"
    end
  end  

  x.report("symbol") do
    for z in 0..1000000
      zf = :hello
    end
  end   
end

дает:

Rehearsal ------------------------------------------------
single-quote   0.610000   0.000000   0.610000 (  0.620387)
double-quote   0.630000   0.000000   0.630000 (  0.627018)
symbol         0.270000   0.000000   0.270000 (  0.309873)
--------------------------------------- total: 1.580000sec
1
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: