흔히 나는 {foo->value,...}
형태의 함수 옵션 목록 (또는보다 일반적인 대체 목록)을 다루고 있습니다. foo가 이미 $ Context에 값을 가지고있을 때 이것은 버그가됩니다. 이를 방지하는 한 가지 확실한 방법은 심볼 대신 문자 "foo"를 사용하는 것입니다 : {"foo"->value,...}
. 이것은 작동하지만, 내가 아는 노련한 LISPers의 분노를 불러 일으키는 것처럼 보입니다. 누가 상징과 문자열이 섞여 있는지 나를 징계하고 내장 된 인용 구조를 사용하라고합니다.기호 대신 문자열을 사용 : good 또는 evil?
은이지만 문자열을 사용하지 않고도 충돌을 피할 수있는 코드를 작성할 수 있지만 종종 가치가있는 것보다 더 많은 문제가있는 것으로 보입니다. 반면에 {"string"->value}
대체 규칙의 예가 너무 많습니다. 그래서 당신에게 질문은 - 이것이 받아 들일 수있는 사용 패턴인가? ... 특히 적절할 경우가 있는가? .. 피해야 할 곳 ... ..
+1 기술적으로 대문자 기호는 Mathematica 내장 함수를 위해 예약되어 있습니다. 그러나이 규칙은 광범위합니다 무시. 그 이유는 대문자로 된 심볼이 다운 값을 갖지 않을 것이라는 사실을 거의 확신 할 수 있기 때문입니다. 나는 함수 이름에 대한 예약을 존중하려고 노력하지만 옵션의 경우 나는 대문자로 된 이름을 사용하여 내 자신을 정의한다. – WReach
@WReach : 대문자로 된 이름은'System '컨텍스트의 기호에만 예약됩니다. 다른 규칙은 규칙이 아니며 대화 형 세션에서 작성된 기호에만 적용되며 패키지에는 적용되지 않습니다. 패키지에서, 관례는 내 보낸 함수와 옵션 이름을 대문자로 사용하는 것입니다.이는 WRI와 제 3 자에 의해 제작 된 많은 애드온 패키지에서 볼 수 있습니다. 또한 이것은 Roman Maeder가 "Programming in Mathematica"에서 제공 한 조언인데, 이는 패키지 작성을위한 표준 참조입니다. 전체 이름이 다르므로 충돌로 인해 그림자가 발생하므로 경고 메시지가 나타납니다. –
+1 "문자열을 사용할 때 볼 수있는 주된 문제점은 내성 검사 기능을 줄일 수 있다는 것입니다." –