Ruby에서 한 줄에 메소드를 어떻게 정의합니까?


92

def greet; puts "hello"; end루비에 한 줄에하는 방법을 정의 할 수있는 유일한 방법은?


11
답변에서 알 수 있듯이 한 줄에 다른 방법으로 메서드를 정의 할 수 있지만 문제는 당신이해야합니까? 모든 정의는 유지 관리 및 가독성을 위해 명확하고 깔끔한 방식으로 작성되어야하므로 한 줄이 다루기 어렵거나 혼란스러워지면이를 퍼뜨려 야합니다. 일부 언어는 코드 연구 방식으로 간결한 코딩을 장려하는 것처럼 보이지만 Ruby 코딩 스타일은 스터디 함보다 우아함, 가독성 및 유지 관리 성을 장려합니다. 처음 세 가지를 달성하면 우리는 당신에게 절할 것입니다.
Tin Man

답변:



76

완전히 새로운 답변을 제공하십시오.

일반적으로 한 줄 방법은 피하십시오. 비록 그들이 야생에서 다소 인기가 있지만, 그들의 사용을 바람직하지 않게 만드는 정의 구문에 대한 몇 가지 특징이 있습니다. 여하튼- 한 줄 메서드에는 표현식이 하나만 있어야합니다 .

# bad
def too_much; something; something_else; end

# okish - notice that the first ; is required
def no_braces_method; body end

# okish - notice that the second ; is optional
def no_braces_method; body; end

# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end

# good
def some_method
  body
end

규칙에 대한 한 가지 예외는 빈 본문 메서드입니다.

# good
def no_op; end

에서 bbatsov / 루비 - 스타일 가이드 .


39
def add a,b; a+b end

세미콜론은 Ruby의 인라인 문 종결 자입니다.

또는 define_method방법을 사용할 수 있습니다 . (편집 : 이것은 루비 1.9에서 더 이상 사용되지 않습니다)

define_method(:add) {|a,b| a+b }

4
Ruby 2+에서 더 이상 사용되지 않는 것 같지 않습니다.
michau

9

또 다른 방법:

define_method(:greet) { puts 'hello' }

메서드를 정의하는 동안 새 범위를 입력하지 않으려는 경우 사용할 수 있습니다.


NoMethodError : Ruby 1.9.3에서 Object : Class에 대한 개인 메서드`define_method '호출
Jared

3
define_method루비 1.9에서 "민영화"한
edgerunner

8

또 다른 방법 :

def greet() return 'Hello' end

13
Ruby에서 메서드의 반환 값은 마지막 문에서 반환 된 값입니다. return가드 조항이 아니기 때문에 여기 가 필요하지 않습니다 .
Damien

1
가되지는 않지만, 때문에 Upvoted 필요 는가 return그 이하에 정통한 (또는 잘 알고) 루비에 대한 가독성을 추가 할 수 있습니다. YMMV 항목 중 하나입니다 ...
Potherca
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.