Ruby를 처음 배우는 중입니다. 조합 된 비교 연산자 (또는 우주선 연산자)를 사용하여 연산자 앞에 배치 된 명령문이 실행되지만 나중에 배치되는 명령문은 오류를 일으킬 것이라는 것을 블록문 내부에서 발견했습니다. 나는 세미콜론으로 노는 것으로 이것을 발견했다.블록 문에서 그 뒤에 뭔가가있을 때 조합 된 비교가 실패하는 이유는 무엇입니까?
list.sort { |item1, item2| puts "foo"; item1 <=> item2 }
작동하지만
list.sort { |item1, item2| item1 <=> item2; puts "foo" }
이 실패합니다.
차단 문 외부에서 시도했지만 문제가 사라졌습니다. 그런 다음 여러 줄로 된 블록 명령문 (예 :
list.sort do |item1, item2|
item1 <=> item2
puts "foo"
end
)을 시도했으며 단일 행 블록과 동일한 문제가 있습니다.
무슨 일이 일어나는지 아는 사람이 있습니까?
가장 좋은 설명은 < => splat와 같은 매개 변수 기능을 사용하고 항목 2 이후의 텍스트를 빨아들이지만 차단 문에서 발생하지만 왜 외부에서 발생하지 않는지는 알 수 없습니다. 하나 또는 세미콜론과 개행 문자를 무시하는 이유. 간단한 검색은 유용한 문서를 찾지 못했습니다.
편집 : Codeacadamy.com의 컴파일러를 사용할 때 "String with String with string failed"오류가 발생합니다.
Edit2가 :
ruby -e '
> list = ["one", "two", "three"]
> list.sort { |f, s| f <=> s; puts "foo" }
> puts list
> '
foo
-e:3:in `sort': comparison of String with String failed (ArgumentError)
from -e:3:in `<main>'
어떤 오류가 있습니까? 당신이 말했듯이 그것은 실패합니다. 우리는 당신의 샘플 데이터를 볼 필요가 있습니다. –