가끔 if
/unless
수식자를 사용하려고하지만 조건부로 실행되는 부분에 조건 내에 정의 될 로컬 변수가 포함되는 경우가 있습니다. 예를 들어, 수정 자 대 및/또는
a = [1, 2, 3]
n = 3*(x**2) + 4*x + 5 if x = a[2]
m = 6*(y**2) + 7*y + 8 unless (y = a[0]).zero?
는 구문 분석 오류
x
때문에,
y
가
if
/
unless
수정하기 전에 읽기를 제공 할 것입니다. 이다
x = a[2] and n = 3*(x**2) + 4*x + 5
(y = a[0]).zero? or m = 6*(y**2) + 7*y + 8
사실 게다가 그것이 오류가 발생하지 않습니다 :이를 방지하기 위해, 나는 꽤 많은 (적어도 나를 위해) 일반적인 and
대신 if
및 or
를 사용하는 대신에 unless
생각 거기에 어떤 차이가 있습니까? 이 일에 어떤 부작용이 있습니까? 그리고 더 좋은 방법이 있습니까?
당신이 실제로 말하는 것은 특정 언어에 대한 일반적인 코딩 스타일입니다. Perl에서는'if' 테스트와 짧은 부울 테스트에서 할당을 수행하는 것이 일반적이며, 일부 연산에서는'and' 또는'or' 접합이 사용됩니다. Perl 프로그램이 종종 회선 잡음처럼 보이는 이유 중 일부일 수도 있습니다. :-) Ruby에서는 간결함으로 인해 많은 것을 얻지 못했기 때문에 우리는 그렇게하지 않는 경향이 있으며 유지 보수 문제로 이어질 수있는 것이 무엇인지 명확하지는 않습니다. 나는 Perl 개발자들이 그런 식으로 글을 쓰지 않겠다는 권고안을 보았지만 어떤 사람들은 사나이다고 생각하고 다른 사람들은 오래된 습관과 싸우고 있다고 생각한다. –
관련이 있지만 http://stackoverflow.com/questions/2291646/in-ruby-why-wont-foo-true-unless-definedfoo-make-the-assignment –