Ruby : 변수를 문자열로 병합
Ruby에서 변수를 문자열로 병합하는 더 좋은 방법을 찾고 있습니다.
예를 들어 문자열이 다음과 같은 경우 :
는 " "animal
action
second_animal
animal
, action
및에 대한 변수 second_animal
가 있습니다. 해당 변수를 문자열에 넣는 가장 좋은 방법은 무엇입니까?
관용적 인 방법은 다음과 같이 작성하는 것입니다.
"The #{animal} #{action} the #{second_animal}"
문자열을 둘러싼 큰 따옴표 ( ")에 유의하세요. 이것은 Ruby가 내장 된 자리 표시 자 대체를 사용하는 트리거입니다. 작은 따옴표 ( ')로 바꿀 수 없습니다. 그렇지 않으면 문자열이 그대로 유지됩니다.
sprintf와 유사한 형식을 사용하여 문자열에 값을 삽입 할 수 있습니다. 이를 위해 문자열에는 자리 표시자가 포함되어야합니다. 인수를 배열에 넣고 다음 방법 중 하나를 사용하십시오. (자세한 내용 은 Kernel :: sprintf 설명서를 참조하십시오 .)
fmt = 'The %s %s the %s'
res = fmt % [animal, action, other_animal] # using %-operator
res = sprintf(fmt, animal, action, other_animal) # call Kernel.sprintf
인수 번호를 명시 적으로 지정하고 서로 섞을 수도 있습니다.
'The %3$s %2$s the %1$s' % ['cat', 'eats', 'mouse']
또는 해시 키를 사용하여 인수를 지정하십시오.
'The %{animal} %{action} the %{second_animal}' %
{ :animal => 'cat', :action=> 'eats', :second_animal => 'mouse'}
%
연산자에 대한 모든 인수의 값을 제공해야합니다 . 예를 들어 animal
.
#{}
다른 답변에서 언급했듯이 생성자를 사용합니다 . 나는 또한 여기서 조심해야 할 진짜 미묘함이 있음을 지적하고 싶다.
2.0.0p247 :001 > first_name = 'jim'
=> "jim"
2.0.0p247 :002 > second_name = 'bob'
=> "bob"
2.0.0p247 :003 > full_name = '#{first_name} #{second_name}'
=> "\#{first_name} \#{second_name}" # not what we expected, expected "jim bob"
2.0.0p247 :004 > full_name = "#{first_name} #{second_name}"
=> "jim bob" #correct, what we expected
문자열은 작은 따옴표로 만들 수 있지만 ( first_name
및 last_name
변수에서 설명한대로) #{}
생성자는 큰 따옴표가있는 문자열에서만 사용할 수 있습니다.
["The", animal, action, "the", second_animal].join(" ")
또 다른 방법입니다.
이를 문자열 보간이라고하며 다음과 같이 수행합니다.
"The #{animal} #{action} the #{second_animal}"
중요 : 문자열이 큰 따옴표 ( "") 안에있을 때만 작동합니다.
예상대로 작동하지 않는 코드의 예 :
'The #{animal} #{action} the #{second_animal}'
표준 ERB 템플릿 시스템이 시나리오에 적합 할 수 있습니다.
def merge_into_string(animal, second_animal, action)
template = 'The <%=animal%> <%=action%> the <%=second_animal%>'
ERB.new(template).result(binding)
end
merge_into_string('tiger', 'deer', 'eats')
=> "The tiger eats the deer"
merge_into_string('bird', 'worm', 'finds')
=> "The bird finds the worm"
다음과 같이 지역 변수와 함께 사용할 수 있습니다.
@animal = "Dog"
@action = "licks"
@second_animal = "Bird"
"The #{@animal} #{@action} the #{@second_animal}"
출력은 다음과 같습니다. "The Dog licks the Bird "
참고 URL : https://stackoverflow.com/questions/554666/ruby-merging-variables-in-to-a-string
'programing' 카테고리의 다른 글
Razor를 사용하여 DateTime 형식 변환 (0) | 2020.09.06 |
---|---|
보기보다는 모델에서 "number_to_currency"도우미 메서드를 사용하는 방법은 무엇입니까? (0) | 2020.09.06 |
최대 값을 초과하지 않고 어떻게 변수를 증가시킬 수 있습니까? (0) | 2020.09.06 |
UIWebView에서 스크롤을 허용하지 않습니까? (0) | 2020.09.06 |
Rails를 설치할 때 "/ usr / bin 디렉토리에 대한 쓰기 권한이 없습니다"오류를 어떻게 수정합니까? (0) | 2020.09.06 |