% w (array)은 무슨 뜻인가요?


836

FileUtils에 대한 설명서를보고 있습니다.

다음 줄에 혼란스러워합니다.

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

무슨 %w뜻입니까? 문서를 알려 주시겠습니까?

답변:


1245

%w(foo bar)에 대한 바로 가기입니다 ["foo", "bar"]. 쉼표 대신 공백으로 구분되고 따옴표없이 문자열 배열을 작성하는 표기법이라는 의미입니다. zenspider의 quickref 에서 리터럴을 작성하는 방법의 목록을 찾을 수 있습니다 .


199
또한 괄호는 대괄호 % w [...], 중괄호 % w {...} 또는 느낌표 % w! ...!와 같은 다른 문자 일 수 있습니다. 이들 모두 동일한 동작을 갖습니다 (배열 반환).
ryanb

143
이것이 의미하는 것을 기억 상으로 기억하는 가장 쉬운 방법은 "공백 (w)으로 분리 된 배열"입니다.
Julik

7
"일반 구분 입력"을 참조하십시오. ruby-doc.org/docs/ProgrammingRuby/html/language.html
Jared Beck

121
문자열에 공백이 있으면 \로 이스케이프하십시오. 예 :%w(ab\ c def) # => ["ab c", "def"]
Dmitriy

6
이 페이지도 문제를 해결했을 것으로 생각합니다 : ruby-doc.org/core-2.0/doc/syntax/…
The Constructor

471

내 생각 엔 %w()"워드 배열" 합니다. 요소는 공백으로 구분되며 문자열 배열을 반환합니다.

다른 % 리터럴이 있습니다.

  • %r() 정규 표현식을 작성하는 또 다른 방법입니다.
  • %q() 작은 따옴표로 묶인 문자열을 작성하는 또 다른 방법입니다 (여러 줄이 될 수도 있습니다).
  • %Q() 큰 따옴표로 묶인 문자열을 제공합니다
  • %x() 쉘 명령입니다
  • %i() 기호 배열을 제공합니다 (Ruby> = 2.0.0).
  • %s()foo기호로 바뀝니다 ( :foo)

나는 다른 사람을 모른다,하지만 거기에 숨어있는 일부가있을 수 있습니다 ...


32
Ruby 2.0.0부터는 %i()기호 배열을 생성하는 데 사용할 수도 있습니다 .
David Tuite

10
또한 큰 따옴표로 묶은 문자열을 제공하고 큰 따옴표를 이스케이프 처리하는 %()(또는 %[]또는 %{})가 %Q()있습니다. 예%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
Dennis

59

이 또한 %s예를 들어, 당신이 어떤 심볼을 만들 수 있다는 :

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'

Ruby 2.0.0부터는 다음이 있습니다.

%i( a b c )   # => [ :a, :b, :c ]
%i[ a b c ]   # => [ :a, :b, :c ]
%i_ a b c _   # => [ :a, :b, :c ]
# etc...


22

오래된 게시물이지만 질문이 계속 나오고 답변이 항상 명확하지는 않으므로 여기에 내 생각이 있습니다.

%w그리고 Array와 관련된 %WGeneral Delimited Input 유형의 예입니다 . 포함하는 다른 종류가 있습니다 %q, %Q, %r, %x%i.

대문자와 소문자 버전의 차이점은 작은 따옴표와 큰 따옴표의 기능에 액세스 할 수 있다는 것입니다. 작은 따옴표와 (소문자)를 사용하면 %w코드 보간 ( #{someCode}) 이없고 작동하는 제한된 이스케이프 문자 범위 ( \\, \n)가 있습니다. 큰 따옴표와 (대문자)와 %W우리가 이러한 기능에 액세스 할 수 있습니다.

사용 된 분리 문자는 열린 괄호뿐만 아니라 모든 문자가 될 수 있습니다. 위의 예를 사용하여 효과를 확인하십시오.

예제 %w와 전체 목록, 이스케이프 문자 및 구분 기호 로 전체 내용을 작성하려면 " Ruby-% w 대 % W – 비밀이 공개되었습니다! "를 살펴보십시오 .


17

대신 %w()우리는 사용해야합니다%w[]

Ruby 스타일 가이드에 따르면 :

단어 배열 (공백과 특수 문자가없는 비어 있지 않은 문자열)이 필요할 때 리터럴 배열 구문보다 % w를 선호하십시오. 이 규칙은 두 개 이상의 요소가있는 배열에만 적용하십시오.

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]

다양한 퍼센트 리터럴에 가장 적합한 중괄호를 사용하십시오.

[]%w, %i, %W, %I표준 배열 리터럴과 정렬되므로 배열 리터럴 ( )의 경우

# bad
%w(one two three)
%i(one two three)

# good
%w[one two three]
%i[one two three]

자세한 내용은 여기 를 참조 하십시오 .


11

http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings의 Percent Strings 문서에서 발췌 :

%를 생성하는 % (...) 외에도 %는 다른 유형의 객체를 생성 할 수 있습니다. 문자열과 마찬가지로 대문자는 보간 및 이스케이프 문자를 허용하고 소문자는 비활성화합니다.

루비의 퍼센트 문자열 유형은 다음과 같습니다.
...
% w : 문자열 배열


2
이런 고마워! 나는 그것이 존재하지 않는다고 생각하기 시작했습니다. 다른 사람이 제공 한 rubydoc 링크가 끊어졌습니다.
Gerry

이것들에 대한 문서는 오랫동안 RubyDocs에 포함되지 않았습니다.
Tin Man

2

전체 사용자 이름의 CSV 스프레드 시트에서 많은 열이 제공되었으며 공백을 사용하여 서식을 유지해야했습니다. 루비를 사용하는 동안 가장 쉬운 방법은 다음과 같습니다.

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

이것은 %()문자열 을 생성 "Porter Smith\nJimmyJones\nRonald Jackson"하고 배열을 split문자열 로 가져 오는 강조 표시"\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

따라서 OP의 원래 질문에 대답하기 위해 최종 배열 출력에 존재 하고 싶을 때 %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')발생 space했을 수 있습니다 space.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.