оператор if внутри ruby ​​создания массива - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь сделать оператор if внутри создания массива

markers_index = Array.new        
@events.each_with_index do |event, index|
...

        markers_index << {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [event.longitude, event.latitude]
          },
          properties: {
            markerurl: event.photo.marker.url,
            divclass: marker_class,
            if has_popup
              popupContent: marker_popup
            end
          }
        }
    end

Но он вызывает синтаксическую ошибку

неожиданное ':', ожидание ключевого слова_end popupContent: 'marker_popup '

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

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

В дополнение к условному условию if после создания хэша, как кто-то еще упомянул, вы также можете заполнить значение вашей пары ключ / значение хеш-функции только в том случае, если оператор оценивается как true.Затем вы просто проверяете, является ли значение ноль, чтобы действовать / не воздействовать на него позже, используя троичный оператор (условие? Если true: если false):

markers_index = Array.new        
@events.each_with_index do |event, index|
...

        markers_index << {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [event.longitude, event.latitude]
          },
          properties: {
            markerurl: event.photo.marker.url,
            divclass: marker_class,
            popupContent: has_popup ? marker_popup : nil
          }
        }
    end
0 голосов
/ 25 сентября 2018
h= {
  type: 'Feature',
  geometry: {
    type: 'Point',
    coordinates: [event.longitude, event.latitude]
  },
  properties: {
    markerurl: event.photo.marker.url,
    divclass: marker_class,
  }.tap { |g| g[:popupContent] = marker_popup if has_popup }
}

См. Object # tap .

0 голосов
/ 24 сентября 2018

Например:

h= {
  type: 'Feature',
  geometry: {
    type: 'Point',
    coordinates: [event.longitude, event.latitude]
  },
  properties: {
    markerurl: event.photo.marker.url,
    divclass: marker_class,
  }
}
if has_popup
  h[:properties][:popupContent]= marker_popup
end
markers_index << h
...