복붙노트

[SCALA] 스칼라에서 유효한 식별자 문자

SCALA

스칼라에서 유효한 식별자 문자

나는 매우 혼란 찾을 한가지는 내가 방법 및 변수 이름에 사용할 수있는 문자와 조합 알고있다. 예를 들면

val #^ = 1 // legal
val #  = 1 // illegal
val +  = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬  = 1 // legal

내가 알고있는 것처럼, 숫자 식별자와 오퍼레이터 식별자 사이에 차이가있다. 밑줄 (혼합 식별자)로 구분하지 않는 한, 일치 하나 또는 둘 모두 다른 있지만를 혼합 할 수 있습니다.

스칼라 6.10에서 프로그래밍에서,

우리가 사용에서 제외됩니다 그래서 () [] {} ' "_;., 그리고`

나는 위키 백과에 유니 코드 수학 기호를 보였지만, 내가 찾은 사람은 +를 포함하지 않았다 :? 등 운영자 문자가 무엇인지의 최종 목록 곳이 있습니까?

또한, 어떤 아이디어 왜 유니 코드 수학 연산자는 (오히려 문자 제외) 연산자로 포함되지 않습니다?

해결법

  1. ==============================

    1.사양에 EBNF 구문에서 사용 :

    사양에 EBNF 구문에서 사용 :

    upper ::= ‘A’ | ... | ‘Z’ | ‘$’ | ‘_’ and Unicode category Lu
    lower ::= ‘a’ | ... | ‘z’ and Unicode category Ll
    letter ::= upper | lower and Unicode categories Lo, Lt, Nl
    digit ::= ‘0’ | ... | ‘9’
    opchar ::= “all other characters in \u0020-007F and Unicode
                categories Sm, So except parentheses ([]) and periods”
    

    그러나 또한 매우 어휘 문법을 시작으로 정의하는 것을 고려 :

    Parentheses ‘(’ | ‘)’ | ‘[’ | ‘]’ | ‘{’ | ‘}’.
    Delimiter characters ‘‘’ | ‘’’ | ‘"’ | ‘.’ | ‘;’ | ‘,’
    

    여기에 내가 가지고 올 것입니다. 문자, 숫자, 괄호 및 구분 기호를 제거 범위 \ u0020-007F에서 제거에 의해 작동, 우리는 (드럼 롤) ... opchar 위해 가지고 :

    ! # % & * + - / <=>? @ \ ^ | ~ 또한 SM과 그래서는 - 괄호 및 기간을 제외하고.

    (편집 : 여기에 올바른 예를 추가 :). 요약하면, 여기에 하이라이트 모든 경우가 몇 가지 유효한 예합니다 - REPL에서 \ 조심, 나는이 \\로 탈출했다 :

    val !#%&*+-/:<=>?@\^|~ = 1 // all simple opchars
    val simpleName = 1 
    val withDigitsAndUnderscores_ab_12_ab12 = 1 
    val wordEndingInOpChars_!#%&*+-/:<=>?@\^|~ = 1
    val !^©® = 1 // opchars ans symbols
    val abcαβγ_!^©® = 1 // mixing unicode letters and symbols
    

    주 1 :

    나는 루, LL, 소호, 중위, N1 개의 알아낼이 유니 코드 범주 인덱스를 발견 :

    노트 2:

    val #^ = 1 // legal   - two opchars
    val #  = 1 // illegal - reserved word like class or => or @
    val +  = 1 // legal   - opchar
    val &+ = 1 // legal   - two opchars
    val &2 = 1 // illegal - opchar and letter do not mix arbitrarily
    val £2 = 1 // working - £ is part of Sc (Symbol currency) - undefined by spec
    val ¬  = 1 // legal   - part of Sm
    

    노트 3:

    예약어 다른 운영자 보이는 것들 : _ : => <- <: <%> : # @ 또한 \ u21D2 ⇒ 및 \ u2190 ←

  2. ==============================

    2.언어 사양입니다. 제 1 규칙을 준다 (페이지 3) 어휘 문법 :

    언어 사양입니다. 제 1 규칙을 준다 (페이지 3) 어휘 문법 :

    이것은 기본적으로 스칼라 프로그래밍에 프로그래밍 당신의 추출물과 동일합니다. +는 유니 코드 수학 기호 아니지만, (_ 포함하지 않는 편지, 또는 $, 숫자하는 paranthesis, 구분자) 확실히 위에 나열된 ASCII 인쇄 가능 문자입니다.

    목록에서 :

  3. from https://stackoverflow.com/questions/7656937/valid-identifier-characters-in-scala by cc-by-sa and MIT license