[ruby] Ruby : 변수를 문자열로 병합

Ruby에서 변수를 문자열로 병합하는 더 좋은 방법을 찾고 있습니다.

예를 들어 문자열이 다음과 같은 경우 :

는 ” “animal actionsecond_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_namelast_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