2012-09-28 4 views
7

나는 스칼라에서 튜플을 반환하는 메서드를 가지고 있는데, 메서드가 'test'라고 가정 해 보겠습니다. 그럼 난 그러나대문자 변수에 일치 패턴을 적용하는 방법은 무엇입니까?

val (X,Y) = test() 

을하고 싶은, 패턴 매칭은 변수 이름 즉, 소문자 때 스칼라에서 작동 :

val(_X,_Y) = test(); val X = _X; val Y = _Y 

이 ..., 확인을 작동하지만 못생긴, 그리고 간결한. X와 Y는 행렬이기 때문에 소문자 변수를 사용하고 싶지는 않습니다. (scipy 및 matlab에, 나는 그런 제한을 예를 들면 가지지 않을 것이다).

나는 소문자 변수가 대문자처럼 행동하도록하는 방법이 있다고 생각한다. 즉, 'x`를하면된다. 어쩌면 대문자 변수를 소문자처럼 행동하게하는 방법이 있을까요? 그래서, 그것은 내 질문입니다 : 스칼라의 대문자 변수에 직접 패턴 매칭하는 방법이 있습니까?

답변

6

짧은 대답은 이 아닙니다.

구문 규칙을 사용하면 다른 사람들이 코드를 읽고 이해할 수 있습니다. 스칼라의 규칙은 변수가 소문자로 시작하고 상수가 클래스가 대문자로 시작한다는 것입니다. 이를 위반하면 패턴 일치 문제와 같은 문제가 발생할뿐만 아니라 코드가 읽기 쉽게됩니다. (나를 믿어도, 그런 관습을 신경 쓰지 않는 다른 사람이 작성한 코드를 읽어야한다면 그 사람을 저주 할 것이다.)

변수가 행렬임을 강조하려면 당신은 xMatrixyMatrix 같은 것을 사용하십시오. 이렇게하면 변수임을 알 수 있으며 행렬을 나타냅니다.

또는 모든 매트릭스 변수가 "M"이라고 말하면서 끝내는 프로젝트 관련 규칙을 만듭니다 (예 : xMyM).

코드를 읽을 수있게하면 몇 가지 문자를 입력해볼 가치가 있습니다.

+4

언어를 발견 한 후 처음 20 시간 동안 대문자 변수 이름을 사용할 수있는 언어에 대해서는 조금 이상하다고 생각합니다. 그런 다음 갑자기 작은, 유용하지만 유용한 용도로 갑자기 대문자 변수를 결정합니다. , 허용되지 않습니다! –

+0

@HughPerkins 그 점에 동의합니다. 그리고 심지어 더 복잡해집니다 : 스칼라는 대문자로 변수로 정의 된 상수에 패턴 매치를 허용합니다.'val MyConst = "Text"와 같은 것; someString match {case MyConst => ...; ...}'. 이것은 많은 혼란을 야기합니다. 가장 합리적인 규칙은 최상위 상수에 대문자 만 사용하고 다른 모든 장소에서는 소문자를 사용하는 것입니다. –

+0

그래, 음, 아무도 질문에 긍정적 인 답을 제공하지 못했기 때문에, 특히 유형을 지정할 수 없다는 문제를 해결하는 방법에 대한 건설적인 아이디어를 제공 할 때 답을 지금 답으로 표시하겠습니다. (상수 vs 변수). –

1

이렇게 할 방법이 없으므로 안됩니다. 행렬임을 알려주는 변수의 유형이 이미 있으므로 변수 이름을 대문자로 만들 필요가 없습니다.

+0

범용 소프트웨어 개발에 해당 될 수 있습니다. (그렇다고 말하는 것은 아니지만 그것이 아니라고 주장하지는 않습니다.)하지만 기계 학습을위한 사용을 목표로 삼고 있습니다. 여기서 X는 ' 모든 데이터 포인트 ', x는'단일 데이터 포인트 '를 의미합니다. 이것은 표준 표기법입니다. 예를 들면 주교 인 "패턴 인식과 기계 학습", 141 페이지를보십시오. 물론, 하나의 코드가 언어와 일치하도록 길을 바꿀 수는 있지만, 다른 언어가 아닌 우리의 삶을 편하게 할 수있는 언어는 아닙니다. 길 주변에? scipy 및 matlab과 java 및 C++ 모두 행렬의 이름으로 X를 사용할 수 있습니다. –

+0

물론 x와 x는 스칼라의 표준 표기법과 마찬가지로 수학에서 표준 표기법입니다. 그러나, 이것의 아무도는 당신이하고 싶은 것이 작동하지 않는다는 단순한 사실을 바꿉니다. –

+0

정말로 변수가 상수인지 또는 변수인지 컴파일러/런타임에 알리는 유형이 있어야한다고 주장합니다. FP 세계에서 타입을 구별하기 위해 대문자/소문자를 사용하는 것이 일반적인지는 모르겠지만 조금 이상하게 보입니다. oo world에서 나에게 이상합니다. –

관련 문제