문제

파이썬에서는 다음을 수행 할 수 있습니다.

print "Hi!  I'm %(name)s, and I'm %(age)d years old." % ({"name":"Brian","age":30})

이 행동을 복제하는 가장 가까운 가장 단순한 루비 관용구는 무엇입니까? (문자열 클래스를 원숭이를 입히지 마십시오.)

편집하다: 이것의 정말 탁월한 이점 중 하나는 사전 처리 된 문자열을 변수에 저장하고 다음과 같이 "템플릿"으로 사용할 수 있다는 것입니다.

template = "Hi!  I'm %(name)s, and I'm %(age)d years old."
def greet(template,name,age):
    print template % ({"name":name,"age":age})

이것은 분명히 사소한 예이지만 나중에 사용하기 위해 그러한 문자열을 저장할 수있는 유틸리티가 많이 있습니다. 루비 "Hi! I'm #{name}" 컨벤션은 부적절하게 비슷하지만 즉각적인 평가는 덜 다재다능합니다.

제안을 제안하는 답변을 다운베트하지 마십시오 #{var} 이 편집 전에서 온 기술. (무작위 아이디어 커널 : 질문 저자가 그들을 "구식"으로 표시하는 경우에 대한 대답을 투표로부터 보호해야 할 것입니다 ...?)

도움이 되었습니까?

해결책

당신은 또한 사용할 수 있습니다

printf "1: %<key1>s 2: %<key2>s\n", {:key1 => "value1", :key2 => "value2"}

또는

data = {:key1 => "value1", :key2 => "value2"}
printf "1: %<key1>s 2: %<key2>s\n",  data

또는 (이것은 루비 1.9가 필요합니다. 다른 예제는 확실하지 않습니다)

data = {key1: "value1", key2: "value2"}
printf "1: %<key1>s 2: %<key2>s\n", data

이 지문

1: value1 2: value2

중요한 제한 : 해시의 중고 키 (데이터 내 예에서)는 상징이어야합니다.


위의 예에 대한 언급 :printf 하나의 형식 문자열과 선택적 매개 변수를 취합니다. 그러나 a도 있습니다 String#%-방법.

다음 네 번의 통화는 모두 동일한 결과를 가져옵니다.

printf "1: %<key1>s 2: %<key2>s\n" , {:key1 => "value1", :key2 => "value2"}
printf "1: %<key1>s 2: %<key2>s\n" % {:key1 => "value1", :key2 => "value2"}
print  "1: %<key1>s 2: %<key2>s\n" % {:key1 => "value1", :key2 => "value2"}
puts   "1: %<key1>s 2: %<key2>s"   % {:key1 => "value1", :key2 => "value2"}

두 번째 버전은 먼저 사용합니다 String#%-메드를하고 결과를 보냅니다 printf.

다른 팁

당신은 이것을 좋아합니다 :

values = {:hello => 'world', :world => 'hello'}
puts "%{world} %{hello}" % values

자세한 내용은 다음과 같이 읽으십시오.http://ruby.runpaint.org/strings#sprintf-hash

더 정교한 것이 필요한 경우 ERB 및 Google 템플릿 엔진에 대해 읽으십시오. 웹 페이지, 이메일 등을 생성 해야하는 경우 템플릿 엔진을 사용하는 것이보다 강력한 솔루션이라는 것을 알 수 있습니다.

루비에는 이것에 대한 좋은 트릭이 있습니다.

name = "Peter"
@age = 15 # instance variable
puts "Hi, you are #{name} and your age is #@age"
 class Template

  def %(h)
    "Hi!  I'm #{h[:name]}s, and I'm #{h[:age]}d years old."


  end
end

그런 다음 전화하십시오

t=Template.new
t%({:name => "Peter", :age => 18})

이것은 당신이 요구 한 것이 아니라 힌트를 줄 수 있습니다.

Ruby의 두 배로 인용 된 문자열에서는 다음과 같은 루비 표현의 결과를 삽입 할 수 있습니다.

puts "Hi!  I'm #{name}, and I'm #{age} years old."

곱슬 괄호 안에 표현을 넣으십시오. ( #{age + 5} 또는 #{name + '' + last_name} 또는 함수 호출과 같은 더 복잡한 것일 수도 있습니다.)

그럼에도 불구하고 작동하는 것은 다음과 같은 선을 따라 무언가입니다.

d = {"key1" => "value1", "key2" => "value2"}
s = "string to be magically induced with variables, which are \n * %s and \n * %s.\n"
print s%d.values()
# or
print s%[d["key1"], d["key2"]]

"안녕하세요! 나는 #{name}이고 나는 #{age} 나이가 많다"고 말했다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top