IT Share you

Ruby : 공개 정적 메서드를 만드는 방법은 무엇입니까?

shareyou 2020. 11. 30. 20:19
반응형

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

반응형