Преобразование пустой строки в ноль в Ruby

Для тех, кто ищет обходной путь, вы можете использовать селектор атрибутов, например, если ваш класс начинается с числа. Изменить:

.000000-8{background:url(../../images/common/000000-0.8.png);} /* DOESN'T WORK!! */

на это:

[class="000000-8"]{background:url(../../images/common/000000-0.8.png);} /* WORKS :) */

Кроме того, если есть несколько классов, вам нужно будет указать их в селекторе, я думаю.

Источники:

  1. https://benfrain.com/when-and-where-you-can-use-numbers-in-id-and-class-names/
  2. Есть ли способ обхода CSS-классов с именами, которые начинаются с правильных чисел?

23
задан Josh Lee 15 March 2009 в 06:29
поделиться

5 ответов

Если бы Вы не стыдитесь monkeypatching и синтаксиса злоупотребления, это работало бы:

class String
  def | x
    if empty? then x else self end
  end
end

Тогда можно сказать word.infinitive | word, который на самом деле сканирует справедливо естественно, если Вы спрашиваете меня.

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

Редактирование: Вот возможно более изящное решение:

[word.infinitive, word].find {|x| not x.empty?}
5
ответ дан Josh Lee 29 November 2019 в 00:33
поделиться

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

6
ответ дан asplake 29 November 2019 в 00:33
поделиться

Вы могли использовать тернарный оператор (boolean ? true-val : false-val) с String#empty?

return word.infinitive.empty? ? word : word.infinitive

, если Вы только хотите назвать инфинитив однажды:

return (inf = word.infinitive).empty? ? word : inf

можно также хотеть считать добавление приблизительно memoization к коду.

4
ответ дан rampion 29 November 2019 в 00:33
поделиться

Или вы можете сделать monkeypatch новой функции для String без необходимости злоупотреблять синтаксисом.

class String
  def squash
    self.empty? ? nil : self
  end
end

Теперь вы можете сделать

puts var.squash or "default text"

Я не являюсь носителем английского языка, поэтому я не знаю, является ли squash лучшим словом. Есть ли слово, которое лучше передаст идею "превращать в nil только если пусто"?

4
ответ дан 29 November 2019 в 00:33
поделиться

Вы можете использовать регулярное выражение, например , в этой статье предлагается

(word.infinitive[/.+/m] or word) #Fancy way to convert "" to nil
9
ответ дан 29 November 2019 в 00:33
поделиться
Другие вопросы по тегам:

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