루비 프로그래밍 할 때 나는 항상 나 자신이 일을 찾을 :루비 분 최대 대입 연산자
는a = [a, b].min
이 a
및 b
을 비교하고 a
에서 가장 작은 값을 저장하는 것을 의미한다. 위에 코드를 작성하는 것이 싫으므로 a
을 두 번 써야합니다.
나는 C++의 일부 표준이 아닌 방언 정확히 내가 매우 편리 발견이
a <?= b
했다 작업자을 한 것으로 알고있다. 그러나 나는 반복자 피하기의 특징에있는만큼 운영자에게 정말로 관심이 없다.. 내가
a.keep_max(b)
a
이 my_array[indice1][indice2]
처럼 매우 긴 변수가 될 수 있습니다 쓸 수 있다면 나 또한 행복 할 것입니다, 당신은 두 배를 쓰고 싶지 않습니다.
나는 이것에 인터넷 검색을 많이 했으므로 아무런 결과도 발견되지 않았으므로이 질문은 다른 사람들에게도 유용 할 것입니다.
그래서 루비에서 내가 원하는 것을 표현할 수있는 비 반복적 인 방법이 있습니까?
class Object
def keep_max(other)
[self, other].max
end
end
a = 3
b = 7
puts a.keep_max(b)
을하지만 (개체를 비교할 수없는 경우, 예를 들면) 당신은 예기치 않은 동작을 수있는 오브젝트에주의 정의 방법이어야한다 :
IMO 다시 바인딩 값 (좋은 이유없이) 나쁜 선택입니다, 그냥 다른 이름으로 새 변수를 만듭니다. 그것에 대해 생각해보십시오 : 이제'a'는 값 2를 가지며, 어떤 마술은'a'가 값 1을가집니다 ... 그 종류의 코드는 이해하고 디버그하기가 더 어렵습니다. 하지만, 물론, 나는 기능적으로 위독하다 ;-) – tokland
@tokland, 아마도.그러나 일반적인 동적 프로그래밍 코드 인 floyd-warshall을 사용하면 표현한대로 정확하게 수행 할 수 있습니다. 모든 과제는 명령형 언어의 힘이 될 수 있습니다. – Tarrasch
당신이 명령형 루프 안에있을 때, 변수 이름을 재사용 할 수는 없지만 (그 알고리즘의 기능적 구현은 Ruby에서 비효율적 일 수 있습니다). 내 메모는 단지 변수 이름을 다시 사용하는 지연 코딩에 대한 예방 조치였습니다. – tokland