2009-03-18 4 views

답변

10

에드 스 팽귄 :? 문자 의 문자 코드를 반환합니다.

루비 1.9에 포함되지 않음. 1.9 기준으로 ?a은 'a'를 반환합니다. 여기를 참조하십시오 : Son of 10 things to be aware of in Ruby 1.9!

telemachus ~ $ ~/bin/ruby -v 
ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] 
telemachus ~ $ ~/bin/ruby -e 'char = ?a; puts char' 
a 
telemachus ~ $ /usr/bin/ruby -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] 
telemachus ~ $ /usr/bin/ruby -e 'char = ?a; puts char' 
97 

편집 : changes in Ruby 1.9매우 전체 설명을.

다른 편집 : ?a을 통해 1.8에서 얻는 문자열의 숫자 변환을 원하면 'a'.ord을 사용할 수 있습니다.

+0

나는 왜 'a'대신 'a'라고 말하지 않겠습니까? –

+0

irb 예제를 보내 주셔서 감사합니다. 이 기사에서도이 점을 지적합니다. 그래서 1.9에서,? a는 당신에게 문자 'a'를줍니다. 'a'를 얻는 것은 이상하고 불필요하게 복잡한 구문이 아닙니까? 왜 그냥 'a'가 아닌가? –

+0

좋아요, 글을 쓸 때 쓰는 문자가 하나 더 적습니까? a 아마도 그 이유가 무엇일까요? –

5

변경 사항은 Ruby 1.9의 UTF-8 업데이트와 관련이 있습니다.

?의 Ruby 1.8 버전은 1 바이트 문자로만 동작했습니다. 1.9에서는 멀티 바이트 문자로 작업 할 수 있도록 모든 것을 업데이트했습니다. 문제는 어떤 정수가 ?€에서 반환되어야하는지 명확하지 않다는 것입니다.

그들은 그것을 돌려줌으로써 그것을 해결했습니다. 1.9에서, 다음의 모든 단일 요소 문자열과 동일하다 :

그들은 표기를 삭제해야
?€ 
'€' 
"€" 
"\u20AC" 
?\u20AC 

, IMO보다는 (다소 무작위)의 동작을 변경. 그래도 공식적으로 사용 중지 된 것은 아닙니다.

0

일부 언어 (Pascal, Python)에서는 chars가 존재하지 않습니다. 길이가 1 인 문자열입니다.

다른 언어 (C, Lisp)에서는 문자가 존재하며 'x'또는 # \ x와 같은 고유 한 구문을 사용합니다.

루비는 주로 "chars does not exist"의 측면에 있지만 대부분이 선택을 확신하지 못하는 것 같습니다. 으로하면 데이터 유형으로 chars가 필요합니다. Ruby는 이미 " '와" "에 의미를 할당하기 때문에? x는 char 리터럴의 다른 옵션보다 적당합니다.

나에게 그것은 단순히 당신이 의미하는 바를 말하는 것입니다. foo [0] = 98이라고 말할 수도 있지만 실제로 문자를 의미 할 때 정수를 사용하고 있습니다. 캐릭터를 의미 할 때 문자열을 사용하는 것은 나에게 똑같이 이상하게 보입니다. 지원하는 작업 세트는 거의 완전히 다릅니다. 하나는 다른 하나의 시퀀스입니다. Math.sqrt가 숫자 목록을 만들지 않게하고 첫 번째 것을 보게됩니다. "정수 목록"을 이미 지원 했으므로 언어에서 "정수"를 생략하지는 않습니다.

(사실, Lisp 1.0은 모든 것을위한 교회 숫자였습니다!)하지만 성능은 최악 이었기 때문에 1962 년 Lisp 1.5가 큰 발전을 거두었습니다.)

관련 문제