2009-05-28 2 views

답변

1

Ruby 2.4의 핵심 설명서에서 splat 연산자에 대해 잘 설명되어 있지 않습니다. 언어의 핵심 기능이지만, vm_eval.c에서 rb_yield_splat(VALUE values) 아래의 표시 연산자에 대한 소스 코드를 찾을 수 있습니다.

rb_yield_splatunit test

만든다 그것을 무슨 일이 일어나고 있는지 명확 : 마틴, 그것에 대해

it "yields with passed array's contents" do 
    ret = nil 
    @s.rb_yield_splat([1, 2]) { |x, y| ret = x + y } 
    ret.should == 3 
end 
+0

그 위대한데, 근원이 어디 있는지 어떻게 알았습니까? –

+0

Ruby git 저장소에 [찾았습니다] (https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93). 검색을 C 파일로 제한 한 다음 찾을 때까지 소스 코드를 읽으십시오. – anothermh

+0

와우 좋은데. 고맙습니다. –

7

일부 빠른 Google 검색 결과는 eval.c에 구현 된 것으로 나타났습니다. 파일의 몇 군데에서 "splat"에 대한 참조를 찾을 수 있지만, Ruby의 내부 동작을 충분히 이해할 수는 없습니다.

+0

감사합니다. Ruby 세계를 이해하려고 노력합니다. 그래서 기본적으로, 루비가 아닌 레일이라면 루비에 소스가 없을 것입니다. –

+0

splat 연산자는 핵심 루비 언어의 일부이며 라이브러리 기능은 아닙니다. #to_ary 메소드를 정의하는 모든 객체에서 사용할 수 있지만 여러 변수를 하나의 변수로 수집 할 때 ('a, * b = 1,2,3,4,5'처럼) 항상 정렬. – rampion

+0

@ Rambion, 고마워. 그래서 내 진짜 질문은 될 것이라고 짐작한다 : "라이브러리 기능"(소스 코드가 Ruby에 있음)이 필요없는 "require?" –