Что значит !! значит в рубине?

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

Messages
  -DFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Hello Bob, this is Tony"
  -DFHJ3598uz
    from: Bob
    to: Tony
    from_to: Bob_Tony
    message: "Hello Tony, What can I do for you?"
  -EFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Can you help me with this Firebase query?"

Затем вы можете запросить сообщения от Боба до Тони, используя:

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.orderByChild('from_to').equalTo('Bob_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});

В чатовом приложении вам может потребоваться на самом деле использовать пару отправителя-получателя в качестве ключа:

Messages
  from_Bob_to_Tony
    -DFHJ3598uz
      from: Bob
      to: Tony
      message: "Hello Tony, What can I do for you?"
  from_Tony_to_Bob
    -DFHJ3498ua
      from: Tony
      to: Bob
      message: "Hello Bob, this is Tony"
    -EFHJ3498ua
      from: Tony
      to: Bob
      message: "Can you help me with this Firebase query?"

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

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.child('from_Bob_to_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});
126
задан Andrew Marshall 12 March 2012 в 14:33
поделиться

4 ответа

Не нет. Это используется для преобразования значения в булевскую переменную:

!!nil   #=> false
!!"abc" #=> true
!!false #=> false

обычно не необходимо использовать, хотя, так как единственные ложные значения к Ruby nil и false, таким образом, обычно лучше позволить той конвенции стоять.

Думают о нем как [1 111]

!(!some_val)

Одна вещь, которая является используемым для, законно препятствует тому, чтобы был возвращен огромный блок данных. Например, Вы, вероятно, не хотите возвращать 3 МБ данных изображения в Вашем has_image? метод, или Вы не можете хотеть возвращать свой весь пользовательский объект в logged_in? метод. Используя !! преобразовывает эти объекты в простое true / false.

156
ответ дан John Topley 12 March 2012 в 14:33
поделиться

Это возвращается true, если объект справа не nil и не false, false, если это nil или false

def logged_in?   
  !!@current_user
end
29
ответ дан Andrew Marshall 12 March 2012 в 14:33
поделиться

Обратите внимание, что эта идиома существует на других языках программирования также. C не имел внутреннего bool тип, таким образом, все булевские переменные были введены как int вместо этого, с каноническими значениями 0 или 1. Берет этот пример (круглые скобки, добавленные для ясности):

!(1234) == 0
!(0) == 1
!(!(1234)) == 1

"не - не" синтаксис преобразовывает любое ненулевое целое число в 1, каноническое булево истинное значение.

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

int x = 1234;
if (!!x); // wtf mate
if (x != 0); // obvious
6
ответ дан Tom 12 March 2012 в 14:33
поделиться

! средства инвертируют булево состояние, два !, с является ничем специальным кроме двойного отрицания.

!true == false
# => true

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

!"wtf"
# => false

!!"wtf"
# => true

А более реальный вариант использования:

def title
  "I return a string."
end

def title_exists?
  !!title
end

Это полезно, когда Вы хотите удостовериться, что булевская переменная возвращается. По моему скромному мнению, это довольно бессмысленно, тем не менее, наблюдение, которое и if 'some string' и if true тот же самый поток, но некоторые люди находят полезным явно возвратить булевскую переменную.

14
ответ дан Andrew Marshall 12 March 2012 в 14:33
поделиться
Другие вопросы по тегам:

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