Ruby : 공개 정적 메서드를 만드는 방법은 무엇입니까?
Java에서는 다음을 수행 할 수 있습니다.
public static void doSomething();
그런 다음 인스턴스를 만들지 않고 정적으로 메서드에 액세스 할 수 있습니다.
className.doSomething();
Ruby에서 어떻게 할 수 있습니까? 이것은 내 수업이며 내 이해 self.
에서 메서드를 정적으로 만듭니다.
class Ask
def self.make_permalink(phrase)
phrase.strip.downcase.gsub! /\ +/, '-'
end
end
하지만 전화를하려고 할 때 :
Ask.make_permalink("make a slug out of this line")
나는 얻다:
undefined method `make_permalink' for Ask:Class
메서드를 비공개로 선언하지 않은 이유는 무엇입니까?
귀하의 주어진 예는 매우 잘 작동합니다.
class Ask
def self.make_permalink(phrase)
phrase.strip.downcase.gsub! /\ +/, '-'
end
end
Ask.make_permalink("make a slug out of this line")
1.8.7과 1.9.3에서 시도해 보았습니다 원본 스크립트에 오타가 있습니까?
모두 제일 좋다
더 많은 정적 메서드를 추가 할 수있는 이점이있는 구문이 하나 더 있습니다.
class TestClass
# all methods in this block are static
class << self
def first_method
# body omitted
end
def second_method_etc
# body omitted
end
end
# more typing because of the self. but much clear that the method is static
def self.first_method
# body omitted
end
def self.second_method_etc
# body omitted
end
end
다음은 IRB에 코드를 복사 / 붙여 넣기 한 것입니다. 잘 작동하는 것 같습니다.
$ irb
1.8.7 :001 > class Ask
1.8.7 :002?>
1.8.7 :003 > def self.make_permalink(phrase)
1.8.7 :004?> phrase.strip.downcase.gsub! /\ +/, '-'
1.8.7 :005?> end
1.8.7 :006?>
1.8.7 :007 > end
=> nil
1.8.7 :008 > Ask.make_permalink("make a slug out of this line")
=> "make-a-slug-out-of-this-line"
작동하는 것 같습니다. 당신 irb
도 그것을 테스트하고 당신이 얻는 결과를 확인하십시오. 이 예제에서는 1.8.7을 사용하고 있지만 Ruby 1.9.3 세션에서도 시도해 보았고 동일하게 작동했습니다.
Are you using MRI as your Ruby implementation (not that I think that should make a difference in this case)?
In irb
make a call to Ask.public_methods
and make sure your method name is in the list. For example:
1.8.7 :008 > Ask.public_methods
=> [:make_permalink, :allocate, :new, :superclass, :freeze, :===,
...etc, etc.]
Since you also marked this as a ruby-on-rails
question, if you want to troubleshoot the actual model in your app, you can of course use the rails console: (bundle exec rails c
) and verify the publicness of the method in question.
I am using ruby 1.9.3 and the program is running smoothly in my irb as well.
1.9.3-p286 :001 > class Ask
1.9.3-p286 :002?> def self.make_permalink(phrase)
1.9.3-p286 :003?> phrase.strip.downcase.gsub! /\ +/, '-'
1.9.3-p286 :004?> end
1.9.3-p286 :005?> end
=> nil
1.9.3-p286 :006 > Ask.make_permalink("make a slug out of this line")
=> "make-a-slug-out-of-this-line"
It's also working in my test script. Nothing wrong with your given code.It's fine.
참고URL : https://stackoverflow.com/questions/13767240/ruby-how-to-make-a-public-static-method
'IT Share you' 카테고리의 다른 글
부동 소수점 변수의 범위가 값에 영향을 줍니까? (0) | 2020.12.01 |
---|---|
AssertionError 란 무엇입니까? (0) | 2020.12.01 |
JavaFX-실제로 브라우저에 배포 할 수 있습니까? (0) | 2020.11.30 |
Mercurial에서 마지막 커밋을 어떻게 "롤백"합니까? (0) | 2020.11.30 |
ImportError : PIP를 사용하여 이름 HTTPSHandler를 가져올 수 없습니다. (0) | 2020.11.30 |