2014-09-09 4 views
0

타사 웹 서비스를 사용할 때 배열을 반복하여 요청해야합니다. 변수라는 용어를 사용하지 않으면이 코드가 작동합니다.Ruby에서 특정 문자열 형식을 삽입합니다.

top_5 = get_top_searches[0..4] 
counts = [] 
top_5.each do |term| 
current_count = @client.request(
    'segmentation', 
    event:  "Performed search", 
    from_date: (Date.today - 30.days).strftime("%Y-%-m-%-d"), 
    to_date: Date.today.strftime("%Y-%-m-%-d"), 
    where:  'properties["keywords"] == "dogs"' 
) 
    counts << [term, current_count] 
end 
counts 

그러나 루프 내 변수는 "dogs"이어야합니다. 다음은 이 아닌이 작동하는 문자열 목록입니다. ([ "키워드"]는 큰 따옴표로 묶어야 함)

'properties["keywords"] == "#{term}"' 
"properties[\"keywords\"] == #{term}" 
"properties['keywords'] == #{term}" 
"'properties["keywords"] == #{term}'" 
"'properties[\"keywords\"] == #{term}'" 

나는 아이디어가 없습니다. [ "keywords"]를 큰 따옴표로 묶고, 변수를 보간하고, 가장 바깥 쪽 따옴표가 단일이되도록이 문자열을 포맷 할 수 있습니까?

+0

두 번째 옵션의 속성 [\ "keywords \"] == # {term} "'에 문제가 있습니까? 보간 된 변수가 따옴표로 묶여야만합니까? 즉, 속성 [\ "keywords \"] == \ "# {term} \" "'? – Kimball

+0

안녕하세요! 그것은 실제로 효과가 있었다! 변수는 이스케이프 된 따옴표로 묶어야합니다. – cheeseandpepper

+0

Ruby에서 작은 따옴표로는 보간이 작동하지 않는다는 점을 제외하고는 첫 번째 옵션이 사용되었습니다. – Kimball

답변

0

루비의 작은 따옴표로 묶은 문자열에서 보간법이 작동하지 않는다는 점을 제외하고 첫 번째 옵션은 가깝습니다. "properties[\"keywords\"] == \"#{term}\""은 큰 따옴표가 그날의 순서이기 때문에 거기에 있습니다.

0

다음은 작동하지 않는 문자열 목록입니다.

['dogs', 'cats', 'monkeys'].each do |term| 
    puts "properties[\"keywords\"] == #{term}" 
end 

--output:-- 
properties["keywords"] == dogs 
properties["keywords"] == cats 
properties["keywords"] == monkeys 

글쎄, 당신이 #{term} 주위에 따옴표를 추가해야 할 것 같아요 :

'properties["keywords"] == "#{term}"' 
"properties[\"keywords\"] == #{term}" 

두 번째 작동합니다 ([ "키워드"] 인용을 두 번해야합니다)

['dogs', 'cats', 'monkeys'].each do |term| 
    puts "properties[\"keywords\"] == \"#{term}\"" 
end 

--output:-- 
properties["keywords"] == "dogs" 
properties["keywords"] == "cats" 
properties["keywords"] == "monkeys" 

하지만 (거의 항상) 루비에서 따옴표를 벗어나지 않아야합니다.

%Q{properties["keywords"] == "#{term}"} 

%Q{}은 큰 따옴표와 같은 역할을하며 구분 기호는 사용할 수 있습니다. %Q[], %Q||, %Q**,

바깥 쪽 따옴표는 하나입니까?

작은 따옴표와 큰 따옴표는 모두 String 생성자입니다. 루비는 어느 쪽을 사용하는지 덜 신경 쓸 수 있습니다. 둘 다 String을 생성합니다. 작은 따옴표가있는 문자열은 없습니다. 당신이 실제로 만들려는 문자열 string[0] == "'"string[-1] == "'"을 가지고있는 경우, 당신은이 작업을 수행 할 수 있습니다

where: 'properties["keywords"] == "dogs"' 

점에서 첫 번째 문자 :

['dogs', 'cats', 'monkeys'].each do |term| 
    puts %Q{'properties["keywords"] == "#{term}"'} 
end 

--output:-- 
'properties["keywords"] == "dogs"' 
'properties["keywords"] == "cats"' 
'properties["keywords"] == "monkeys"' 

그러나, 그와 같은 일이 아닙니다 문자열은 p이고 해당 문자열의 마지막 문자는 "입니다.

관련 문제