파이썬의`s =“hello, % s와 같은 루비는 무엇입니까? % s는 어디에 있습니까?” % (“John”,“Mary”)`


141

파이썬에서 문자열 형식에 대한이 관용구는 꽤 일반적입니다

s = "hello, %s. Where is %s?" % ("John","Mary")

루비에서 동등한 것은 무엇입니까?


3
문자열 연결이없고 문자열 형식 만 있습니다. 그리고 구글은 지금까지보다 훨씬 빨리 대답 할 것입니다 ... 루비에서 똑같은 일을 할 수 있다는 것을 알기 위해 약 20 초가 걸렸습니다.

연결을 요구하지 않고 서식 / 대체를 요구합니다. 질문을 바꿔야합니다. 그런데 루비에서는 + 또는 << 연산자로 연결이 수행됩니다.
David

답변:


246

가장 쉬운 방법은 문자열 보간 입니다. 약간의 루비 코드를 문자열에 직접 주입 할 수 있습니다.

name1 = "John"
name2 = "Mary"
"hello, #{name1}.  Where is #{name2}?"

Ruby에서 형식 문자열을 수행 할 수도 있습니다.

"hello, %s.  Where is %s?" % ["John", "Mary"]

거기에 대괄호를 사용해야합니다. 루비에는 튜플이없고 배열 만 있으며 대괄호를 사용합니다.


1
나는 첫 번째를 확실히 사용하려고한다. 그것은 더 읽기 쉽다
David

1
첫 번째는 작동하지 않습니다. # {}은 변수를 찾습니다.이 경우 문자열 "John"이 아니라 John 변수를 인쇄합니다. 두 번째 것은 정확 해 보입니다.
Jason Noble

11
또한 항상'#{name1}' 같지 않은 큰 따옴표사용 하도록주의해야합니다 "#{name1}".
Droogans

3
작은 따옴표에서는 문자열 보간이 작동하지 않으므로 큰 따옴표를 사용해야합니다. 예를 들어 : '#{"abc"}' # => "\#{\"abc\"}", 그러나 원하는 것은"#{"abc"}" # => "abc"
bschlueter

2
첫 번째 방법은 동등하지 않습니다. 템플릿을 값으로 전달할 수 없습니다.
Ondra Žižka

51

Ruby> 1.9에서는 다음을 수행 할 수 있습니다.

s =  'hello, %{name1}. Where is %{name2}?' % { name1: 'John', name2: 'Mary' }

문서를 참조하십시오


나는 거기 에서 Idomatic Ruby 와 동등한 것을 편집 했지만 이제는 받아 들여진 대답이 이미 그렇게하고 있음을
알았습니다 .'edit

문자열 % 연산자와 함께 해시를 사용할 때 형식 문자열에서 참조 된 키 기호가 없으면 KeyError가 발생합니다.
user1164178

19

거의 같은 방식으로 :

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"]
=> "hello, John. Where is Mary?"

루비에서 대괄호는 튜플을 의미합니까? 대괄호가 목록이라고 생각했습니다.
TIMEX

@TIMEX :이 질문이 도움이 될 것입니다 : stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan

3
루비에는 튜플이 없습니다 (적어도 언어로 위조되지 않았습니다). 예, 그것은 배열입니다 (파이썬에서 "목록"은 실제로 배열이라고합니다 ...).

9

실제로 거의 동일

s = "hello, %s. Where is %s?" % ["John","Mary"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.