템플릿:템플릿 사용량
Template:목적
이 템플릿은 모든 인라인 템플릿 사용에 대한 사용자 배포 세부 정보를 위키에 입력하는 데 도움이 된다.[1]
이 버전의 검색 엔진인 Cirrus Search는 정규 표현식 검색을 제공한다.다음과 같은 이점이 있다.
- hastemplate:"전환" 인소스:" xx "접두사:: 3123개 기사를 찾지만
- hastemplate:"전환" 소스:/\{\{ *[Cc]onvert *\[^}]*[\ xx\ ]/ 접두사:: 당신이 진정으로 원했던 45개, 템플릿 안에 xx가 있는 45개 찾음.
이 템플릿은 다음과 같은 몇 가지 regexp 검색 모범 사례를 제시한다.
- 항상 regexp 검색을 필터링하십시오.기본 regexp 검색을 실행하지 마십시오.이 템플릿은 검색 링크를 생성하지만 {{search link}}}과는 달리 이 템플릿은 필터를 미리 빌드하고 템플릿 위키텍스트 내의 패턴을 타겟팅하는 데 필요한 regexp의 더 많은 아르카인 요소.여기서는 템플릿 이름만 입력하고 "패턴" 검색에 초점을 맞추십시오.
- 더 넓은 위키에서 실행하기 전에 작은 검색 도메인에서 시작하십시오.이 템플릿은 데이터베이스에 대해 기술적으로 한 번에 몇 개의 regex 검색만 실행할 수 있기 때문에 작은 설치 공간을 만들기 위해 검색 도메인을 한 페이지로 기본 설정한다.이것은 여러분의 발자국을 최소화하고, 여러분의 검색 링크가 55,493,971페이지에 대해 검증되지 않은 regexp를 결코 실행하지 않을 것을 보장한다. 비록 누군가의 기본 검색이 그렇게 할 수 있다 하더라도 말이다.
- 연구 대상 데이터가 표시된 쿼리를 개발하십시오.기본적으로 대상의 샘플이 이미 들어 있는 페이지의 편집 상자인 임시 샌드박스에서 이 템플릿을 사용하여 시작하십시오.규칙적인 표현은 형식적인 논리인데, 그래서 이 작은 컴퓨터 프로그램들은 대개 처음에는 빠른 테스트를 실행하면 발견하기 쉬운 실수를 포함하고 있기 때문에, 그들이 고안된 큰 데이터 세트에 대해 천천히 디버깅하기보다는 작은 테스트 데이터 세트를 중심으로 빠르게 발전되는 것이 regex의 특징이다.
{{Regex}}도 이러한 관행을 채용하지만, 템플릿 호출에 대해서는 특별히 채용하지 않는다.
이 템플릿으로 개발자는 1) 차선호적 또는 비선호적 템플릿 사용 목록을 생성할 수 있으며 2) 템플릿 기능 패리티를 달성하여 역호환성 코드가 필요하지 않도록 할 수 있다.그들은 wikitxt에서 원하지 않는 템플릿 사용을 직접적으로 제거함으로써 이것을 할 수 있다.Robo-edits는 새로운 버전의 템플릿으로 기능을 변경하거나 잠금 단계에서 새로운 기능을 추가할 수 있다.WP:AWB는 매우 로보 편집자여서 안전한 regexp 검색을 할 수 있고, 완벽한 대안이지만, 위키피디아를 먼저 다운로드해야 할 것이다.
논쟁들
template= 또는{{{1}}} | 템플릿 이름.기본값은 "템플릿 사용"입니다.이름 없는 첫 매개 변수이기도 하다. |
pattern= 또는{{{2}}} | regexp 검색 패턴wikitext에서 템플릿의 내부를 대상으로 한다. 즉, 첫 번째 파이프 이후와 닫힌 곱슬 브래킷 이전: {{Val 9999 ul=m/s fmt=commas}}. 항상 {{!}}}에 '.언제든지 '='에 대해 {{=}}}을(를) 사용하거나, 이름 없는 형식을 사용할 때 사용한다.쿼리 유형에 대한 자세한 내용은 아래의 §About CirrusSearch"를 참조하십시오. |
prefix= 또는{{{3}}} | 도메인을 검색하다일반적인 접두사: 의미, 네임스페이스 번호 허용 또는n 현재 네임스페이스(또는 "{ns:1}}:" 등)에 대해모든 메인 스페이스 사용: 또는 (제로).문자로 시작하는 주공간 문서만 검색하려면 접두사에 할당하십시오.문자로 시작하는 다른 네임스페이스를 검색하려면 네임스페이스를 검색하십시오(또는 '{ns:1}}:letter 등'을 사용하십시오).기본값은 현재 페이지로 설정됨. |
label= 또는{{{4}}} | 링크 레이블을 검색하십시오.앞에 나오는 "이름 없는" 매개변수여서 처음 세 개(이름 없는)를 직접 입력하면 링크 라벨도 직접 입력할 수 있다. |
{{템플릿 파라미터는 템플릿 동작을 지시할 수 있다.}}
- "Named" 매개 변수는 ''indirect value에서 전달을 사용한다.
- " direct value 이름 지정되지 않은" 매개변수는 외부 공간과 함께 전달을 사용한다.
절차
네임스페이스에 페이지 이름을 더하면 전체 페이지 이름이 같음.
여기서의 절차는 반복적이고, 재평가-수정 사이클이다.
- 타겟팅에 관심이 있는 템플릿 인스턴스가 있는 기존 전체 파일 이름을 찾으십시오.또는 직접 작성한 후 쿼리가 찾을 수 있도록 데이터베이스에 저장하십시오.
- Wikitext를 여십시오.템플릿 이름과 regex 패턴을 입력하십시오(나중에 접두사가 추가됨).
- 미리 보기 표시.
- 새로 렌더링된 검색 링크를 누르십시오.각 일치 항목에 굵게 표시된 텍스트, 쿼리(중심) 및 카운트(오른쪽으로 꺼짐)를 기록해 두십시오.
- 브라우저에서 편집 상자로 돌아가십시오. (아니면 다시 돌아가지 마십시오. 검색 결과 페이지에서 쿼리를 수정하십시오.)
- 편집 상자에서 regexp를 수정하십시오.순환하다.
- 접두사를 입력하십시오.네임스페이스로 시작하십시오.그런 다음 네임스페이스에 페이지 이름의 첫 문자를 추가하여 결과 수를 줄일 수 있다.
그런 다음 템플릿에 있는 각 별칭(이름)을 실행하십시오.
6단계는 이 템플릿의 핵심 제공이다.주의사항 비우기: 대상을 변경하면 저장 및 숙청해야 하지만 패턴만 변경하면 안 된다.
이 템플릿은 검색 링크 레이블의 추가를 제공하지만 기본적으로 regexp를 표시하도록 되어 있다.
현재 두 개 이상의 네임스페이스를 검색하려면 {{tlusage} 검색 링크를 공유할 방법이 없다.해결 방법은 네임스페이스당 1개의 tlusage 또는 tlusage 결과 페이지 조회에서 regexp를 네임스페이스 설정 등을 제공하는 {{search link} 템플릿으로 복사하는 것이다.현재 네임스페이스를 선택하는 것은 필수 사항은 아니지만, 네임스페이스를 선택하지 않는 경우 가능한 불일치에 유의하십시오. 즉, 검색 도메인은 현재 사용자의 현재 검색 도메인에 따라 실행될 때마다 달라진다.설정 후 Special(특수:고급 검색.
예제 및 샌드박스
임시 샌드박스로서, 데이터베이스에 이미 저장되어 있는 이와 같은 섹션의 위키텍스트(wikitxt)를 보여주고, 일부 패턴을 수정하고, 미리보기 표시를 하고, 새로 구성된 "데이터베이스 검색" 링크를 클릭할 때 어떤 일치하는지를 볼 수 있으며, 데이터베이스의 항목을 변경하지 않고 안전하게 볼 수 있다.
"1ft/s, 2sq ft, 3m/s, 4m*s-2, 5ft.s-2, 6°C/J, 7J/C"를 생성하는 템플릿 호출은 다음과 같이 이 섹션의 wikitxt에 나타난다.
- {{val 1 ul=ft/s fmt = commas}}
- {{val 2 u=ft2}}
- {{val 3 u=m/s fmt =commas }}
- {{val 4 u=m*s-2}}
- {{val 5 u=ft.s-2}}
- {{val 6 u=C/J}}
- {{val 7 ul=J/C}} → 7J/C
위의 대상에 번호가 매겨지는 방법을 참고한 후 링크를 클릭하십시오.
질의 | {{tlusage}}을(를) 변환하여 검색 링크를 생성 | 답 |
---|---|---|
Q1 이 페이지에는 템플릿 Val이 사용되나? | {{search link hastemplate:"val" prefix:Template:Template usage}} → hastemplate:"val" 접두사:템플릿:템플릿 사용량 | A. 네, 검색 결과에 제목이 표시되기 때문에. |
Q2 이 페이지에서 Val의 fmt 매개 변수를 사용하는가? | {{tlusage val fmt }} → | A. 검색 결과에서 1과 3을 굵은 글씨로 찾아라. |
Q3. 이 페이지에서 Val에게 전화하는 것은 OR? (한 글자 차이) | {{tlusage val pattern=ul?=ft}} → | A. 굵은 글씨로 1, 2, 5를 찾아라.
|
Q4. 그리고 이들 중 누가 그 이후에 fmt=commas를 사용하겠는가? | {{tlusage val pattern=ul?=ft.*commas}} → | A. 컨텍스트는 표시되지 않지만 기사 제목은 표시된다.반 버그? |
콤마 전에 한 칸을 사용하는 것은? | {{tlusage val . commas}} → | A. 1은 2는 아니고.
|
Q5. ul 중 어느 것을 쓰는가?=ft OR fmt=commas | {{tlusage val pattern=(ul?=ft{{!}}co)}} → | A. 1, 2, 3, 5.
|
Q6. ft와 m 중 어느 것을 사용하는가, u= 또는 ul= ? | {{tlusage val pattern=ul?=(ft{{!}}m)}} → | A. 1, 2, 3, 4, 5
|
Q7. 유닛 코드에서 .와 * 중 어느 것을 사용하는가? | {{tlusage val pattern=u.+(\.{{!}}\*) }} → | A. 4, 5. |
파이프를 사용하는 것은? | {{tlusage val \{{!}} }} → | 전부 다. |
Q8. 다음 중 어느 것을 사용하는가? u= 또는 ul= 파라메터? | {{tlusage val pattern=ul?=[^{{!}}}]+(\/{{!}}-)}} → | A. 1,3,4,5,6,7.
|
Q9. 템플릿 네임스페이스에서 Val을 u 또는 ul과 함께 사용하는 위치는? | {{tlre val pattern=ul?= prefix=10}} →hastemplate:"val" insource:/\{\{ *[Vv]al *\[^}]*ul/ 접두사:템플릿: | A. 목록에 있는 15개 내외의 기사에서.({{tlre} 단축키 사용)
|
Q10 {{Convert}의 "and(-)" 옵션을 채택한 기사는? | {{tlre Convert Articles using {{tlf Convert}}'s "and(-)" option. pattern=and\(-\) prefix = 0 }} prefix = 0 }} → | A 단 두 개. |
2분기에는 MediaWiki 소프트웨어가 매개 변수 주위의 공간을 무시하지만 4분기에는 동일한 MediaWiki 소프트웨어가 매개 변수 내부의 공간을 처리하는 방법에 주목하십시오.Q2는 'fmt'와 'val'은 전체 단어인 데다 fmt가 발 내부와 별개로 거의 보이지 않기 때문에 평이한 검색으로 풀렸을 것이다.어때?
또한 CirrusSearch의 regex에 대한 더 일반적인 예제를 참조하십시오.
CirrusSearch 정보
이러한 강력한(그러나 비용이 많이 드는) CirrusSearch 검색 결과는 이전 Lucene-search 매개 변수로는 얻을 수 없었다.Regexp 검색은 서버에서 제한되므로 이 템플릿은 hastemplate: 필터를 매번 사용하여 regex 검색 공간을 줄이고, 접두사: 필터를 사용하여 검색 도메인을 네임스페이스로 최대 제한한다.접두사: 필터는 또한 주어진 문자로 시작하는 페이지 이름만 검색되도록 지정하여 네임스페이스를 필터링할 수 있다.
매개 변수 인소스 및 해시템플릿
다음은 해시템플릿 및 인소스의 CirrusSearch 기능에 대한 몇 가지 참고 사항이다.
Hastemplate에서 배포되는 항목 찾기:
- hastemplate는 하위 항목만 호출될 때 템플릿을 계산하지 않음
- hastemplate는 주석 내의 템플리트를 계산하지 않음
- hastemplate는 nowiki 태그 내의 템플릿을 계산하지 않음
- hastemplate는 파서 함수 및 기타 템플릿 내의 템플릿을 계산하며, 템플릿이 이중 곱슬 브레이스로 포장된 경우.
해스템플릿은 대소문자를 구분하지 않는다.
인소스의 역할은 다음과 같다.
- insource:"quotes-delimited arguments" 위키텍스트의 해당 순서에서 서로 인접한 전체 영숫자 단어만 찾아내고, 이들 사이의 전체 비알파늄 문자 집합을 공백인 것처럼 처리한다.예를 들어,
insource:"M S"
성냥, 하듯이insource:"M-S"
그리고insource:"m=s"
; 그들 모두는 두 개의 주장을 가지고 있고, 일치하는 것은 굵은 글씨로 보여진다. - 플레인에게는 단 하나의 논거가 있다, word1.단어 1 뒤에 나오는 단어들은 정상적으로 처리된다. 단어들은 모두 전체 단어로 AND 처리된다(절대로 조각이나 패턴으로 처리되지 않는다). 또는 단어 줄기는 페이지의 위키텍스트 어디에서도, 그리고 어떤 순서로든; 그리고 그 일치는 대담하게 보여지지 않는다. (intitle은 "quotes" 구문에서도 같은 방식으로 작용한다.)
- Insource:/slash delimited argument/ 모든 걸 찾아내고 심지어 댓글도 찾아낸다.그것은 오직 하나의 논쟁만을 가지고 있다.일치하는 내용이 굵은 텍스트로 표시된다.
- Insource:/regexp/ 모든 것, 심지어 조각과 파트를 찾아내어, "단어"라는 개념은 전달하지 않고, 단지 연속적으로 다른 캐릭터에 인접한 위치에 있는 캐릭터의 그것만을 전달한다.
- Insource:/regexp/ 패턴의 슬래시 문자에 사용해야 하는 이유는 명백하다.그것은 또한 다양한 다른 이유로 다른 메타카락터들을 "백슬래쉬-탈피"하도록 요구한다.
자원의 경우: 결장 후 공간은 허용되지 않는다; 그것은 매우 중요하다.insource:"
또는insource:/
타당한 이유로
인용문이 있는 소스는 많은 종류의 템플릿 사용을 찾을 수 있는 안전하고 충분한 방법이다.대상 문자열이 다음과 같다고 가정하십시오.
- insource:"val 9999 ul AU fmt commas" → 매치
- hastemplate: val insource:"9999 ul" → 매치
- hastemplate: val insource:"999" → 맞수 없음
- hastemplate: val insource:"fmt commas" → 매치
- hastemplate: val insource:"ul AU" → 매치
- hastemplate: val insource:"ul au" → 매치
- hastemplate: val insource:fmt → 매치
경우에 따라서는 불이익이 있을 수도 있다.소스:"질문 버전"은 대소문자를 구분하지 않으며 영숫자가 아닌 문자에 대해서는 보이지 않는다.다른 경우에는 의도한 것보다 더 많은 검색 결과를 갖는 것이 장점이다.철저한 정밀도를 위해 /regex/를 사용한다.
regex 정보
이것은 위키의 위키텍스트 콘텐츠에 대한 질문에 답하기 위해 이 템플릿을 사용하기 시작할 수 있는 충분한 regex를 다룬다.Regex는 메타 문자를 사용하여 리터럴 문자와 일치하는 패턴을 만드는 것이다.당신이 주는 패턴은 성격에 따라 대상과 일치할 것이다.일부 포지션을 여러 가지 가능성과 일치시키려면 메타캐랙터가 필요하며, 위키텍스트에도 있는 동일한 키보드 문자 출신이다.
메타카락터스
왼쪽 곱슬 브래킷은 메타차박터(metacharctor)이므로 주어진 regexp 패턴은 모든 열린 곱슬 브래킷을 "탈출"해야 한다.\{
위키텍스트의 템플리트와 일치시키려 {하는 ""모든 대상 텍스트(모든 Wikitext)는 리터럴 텍스트지만 regex 메타캐랙터들을 "탈출"할 수 있다. \. \? \+ \* \{{!}} \{ \[ \] \( \) \" \\ \# \@ \< \~
wikitxt에서 문자 그대로의 문자로 지칭할 때 우리는 마이닝에 관심이 있다.(wikitxt에서 문자 그대로의 파이프 문자를 찾기 위해 이미 템플릿으로 이스케이프된 파이프 문자의 백슬래시 이스케이프(backslash-escape)를 참고한다.)검색은 의미가 없거나 불필요한 곳이라면 어디서든 백슬래시를 무시한다.\n
성냥 등등.그러니 도망칠 필요까진 없겠지만&
또는>
또는}
그렇게 하는 것은 안전하다.불필요한 백슬래시는 당신의 패턴을 실패하게 하는 것이 아니라, 문자 그대로 특정 문자를 사용하는 것이다. [ ] . * + ? { ( ) " \ # @ < ~
[0-9]
모든 숫자와 일치한다.[a-y]
z를 제외한 모든 소문자,[zZ]
임의의 z(등)그래서 대괄호는 "문자 클래스"를 의미한다.- 도트
.
뉴라인 또는 타겟 위치의 모든 문자와 일치함
이러한 기호가 일치하는 순차적 자릿수 또는 문자의 수는 정량화된 메타카락터를 사용하여 다음과 같이 표현된다.
*
0 또는 그 이상을 의미한다.+
하나 또는 그 이상의 의미?
0 또는 1을 의미한다.
그 뒤에 나오는 성질의.일치하는 횟수도 범위 내에서 지정할 수 있으며,a{2} a{2,} a{2,5}
정확히 2, 2 또는 그 이상 또는 2-5와 일치한다.그래서 곱슬곱슬한 괄호는 "양자"를 의미한다.
- 괄호는 그룹화 메커니즘이기 때문에 이전 문자보다 더 많은 양을 정량화할 수 있고, 그래서 우리는 일련의 대체 매칭에 대한 경계를 만들 수 있다.(아래 교대 참조)
- 따옴표는 대괄호나 백슬래시와 같은 탈출 메커니즘이다.
- 각 괄호는 숫자가 아니라 숫자를 나타낸다.라고 말하다
<5-799>
, 5~799와 1~3개의 포지션으로 매치하기 위해.이 값을 다른 옵션과 비교해 보십시오.[0-9]{1,3}
0-999 또는 00-999 또는 000-999와 같은 수 십 또는 수천 개와 일치할 수 있다. - 틸데
~
앞을 보고 다음 인물을 부정하다.즉, 패턴이 이 위치에서 일치하면, 다음 문자가 일치하면 불일치를 해제한다.~
인격의
CirrusSearch에 의해 제공된 다른 메타카락터들은 어떤 경우에 도움이 될 수 있다: 보완, 간격, 교차점, 그리고 어떤 문자열.
캐릭터 클래스
문자 클래스는 [대괄호]로 묶는다.이것은 이 문자들, "문학적인 문자들"이 복수형을 의미한다.그것은 "문학"을 의미하고, 그래서 보통 캐릭터 수업에서 메타카락터 캐릭터를 벗어날 필요가 없다; 그것들은 이미 네모난 벽돌로 만들어진 것이다./slash 구분 기호/는 물론 문자 클래스 안에서도 슬래시 문자를 피해야 함을 의미한다.문자 클래스에서 슬래시를 제외한 다른 문자는 항상 이스케이프가 필요하지만, 그 이유는]
그리고-
캐릭터 클래스에 특별한 의미(메타카락터)를 가지고 있는데, 그들은 때때로 탈출해야 한다: 그 둘은 또한 문자 그대로의 메타카락터(metacharactor)이며, 그들이 첫 번째 캐릭터라면 탈출해야 한다. 그러나 그렇지 않으면 그들은 또한 대시처럼 탈출해야 한다: 캐릭터 클래스에서 백슬래쉬-슬래쉬만이 탈출 메커니즘으로 작용한다.
캐릭터 수업은 메타캐릭터들을 탈출시키는 역할을 할 수 있다.[- *\/.{\]]
또는[] *\/.{\-]
"대시 OR 파이프 또는 별 또는 슬래시 OR 도트 또는 왼쪽 곱슬 브래킷 또는 오른쪽 사각 브래킷"을 의미한다.그렇게[][.?+* \/{}()\-]"
또는[-[.?+* \/{}()\]]"
위키텍스트에 있는 메타캐랙터들, 백슬래시를 제외한 모든 메타캐랙터들을 찾는 일을 한다.둘 다 아니다.[\]
아닌[\\]
말 그대로 백슬래시를 할 수 있게 해줬어OR 백슬래시 문자에 패턴이 번갈아 나타나며\\
그 사건을 담당하기 위해서요(아래 참조)
캐릭터 수업은 그 자체의 "반대"를 이해하는데, "a 또는 b 또는 c가 아니다"이다.문자 클래스는 목표 위치의 단일 문자를 의미하기 때문에 실제로 집합의 역이 아니라 문자의 NOT이다.
교대
마지막으로, 교대란 AA, BB 또는 CC와 같이 경기에 대한 대체 가능성을 포함하고 있는 regex의 한 종류다.
- 부울 로직의 "AA" 또는 "BB" 또는 "CC"
- AA BB CC 표준에서 MediaWiki CirrusSearch, regexp
(AA{{!}}BB{{!}}CC)
더 큰 regexp 내에서 사용된다.파이프 캐릭터를 {{!}}}. regexp의 "파이프"가 이 템플릿(또는 다른 템플릿)을 혼동하지 않도록 하십시오.우리는 교대체가 가장 긴 패턴을 찾기 때문에 때때로 괄호가 필요하며, 그래서 괄호는 그 경계를 정의하지만 교대체가 전체 regexp 패턴이라면 만들 필요가 없는 경계다.우리의 경우에는pattern=
당신의 공급은 더 길고 미리 만들어진 regexp의 끝에 위치해 있다.
이 템플릿 정보
위키리겔스는 꽤 간단하다.캐릭터는 메타캐릭터가 아닌 이상 자신을 상징한다.만약 그들이 메타캐릭터라면 그들은 캐릭터 클래스 밖에서 탈출한다.다음 세 가지 탈출 메커니즘 중 하나를 사용하십시오.
"."
\.
[.]
여기서 점은 이제 위키텍스트에서 문자 그대로 점이지 메타카락터가 아니다.
첫째, 이 템플릿은 자신의 주장을 명명하거나 명명되지 않은 것으로 간주한다.이름 없는 것을 사용하면 공백으로 시작하거나 끝나는 regexp 패턴을 줄 수 있다.만약 당신이 명명된 것을 사용한다면, 당신은 추가적으로 어떤 외부 공간도 "탈출"해야 한다.(도피하는 것은 다른 곳에 설명되어 있다.)
regexp는 초기 파이프 후와 첫 번째 닫힌 곱슬 브래킷 이전의 영역을 대상으로 한다. 이 패턴 부분은 확장된다.
\}/.{{{pattern}}}
이 템플릿은 패턴을 구성할 수 있는데, 어디에서 당신이 주는 값인가.그 regexp는 의미하지.
- pattern 오른쪽 ^곱슬곱슬한 괄호가 아닌 문자의 숫자()*를 따른다. 다시 말하면 오른쪽 곱슬곱슬한 괄호 앞에 붙는다.
- 템플리트 Name은 왼쪽 곱슬 괄호를 따르며 대소문자를 구분하지 않는다.
- 파이프 (
\{{!}}
)는 이름을 따르지만, 그 중간에서 가능한 한 글자, 즉 점을 허용한다. - 도트는 인용문 및 인포박스 템플릿이 종종 변환되는 방법(또는 """)과 같이 초기 파이프를 자신의 줄에 놓는 경우와 일치하는 "0 또는 1" ()? 뉴라인 문자를 포함하여 어떤 문자와도 일치시킬 수 있다.
이 템플릿은 일반적으로 마지막 문자(예: 템플릿 이름의 tl 패밀리)에 의해서만 다른 템플릿 이름이 많기 때문에 이 패턴을 만들 수 없다.그러나 템플릿의 첫 번째 매개 변수가 새 줄 다음에 시작되는 특정 경우를 일치시키려면 해당 줄과 점을 일치시켜야 한다.쿼리를 수정하고 Infobox 및 Cite 템플릿 검색에 추가할 수 있다.왜냐하면?
0을 일치로 계산하면 파이프가 같은 선에 있는 곳에서도 작동한다.