рубиновые аргументы ключевого слова метода

Как я могу объявить метод с аргументами ключевого слова точно так же, как направляющие делают. некоторые примеры могут быть

Person.find(:all, :conditions => "..."). 

Как я могу использовать символы для создания методов, подобных вышеупомянутому?

Я очень плохо знаком с рубином.Заранее спасибо!

18
задан marcgg 17 March 2010 в 14:37
поделиться

3 ответа

Ruby на самом деле не имеет аргументов ключевых слов. Rails использует функцию Ruby, которая позволяет опускать фигурные скобки вокруг хэша. Например, с find мы действительно вызываем:

Person.find(:all, { :conditions => "...", :offset => 10, :limit => 10 } )

Но если хэш является последним аргументом метода, вы можете оставить фигурные скобки, и он все равно будет рассматриваться как хэш:

Person.find(:all, :conditions => "...", :offset => 10, :limit => 10)

Вы можете использовать это в своих собственных методах:

def explode(options={})
    defaults = { :message => "Kabloooie!", :timer => 10, :count => 1 }
    options = defaults.merge(options)

    options[:count].times do
        sleep options[:timer]
        puts options[:message]
    end
end

А затем вызвать его:

explode :message => "Meh.", :count => 3

Или вызвать его без аргумента, в результате чего будут использоваться все значения по умолчанию:

explode
37
ответ дан 30 November 2019 в 06:22
поделиться

Вам просто нужно определить метод, в котором одним из параметров является хэш. На самом деле это довольно просто.

def method(arg1, params)
  name = params[:name]
  number = params[:number]

А затем назовите его так:

method(arg1, :name => 'Eric', :number => 2)

Два примечания:

  1. В Ruby вам не нужно окружать хэш параметров в {} при вызове метода в большинстве случаев, если только у вас не происходит чего-то сложного. как передача нескольких хешей. В этом случае убедитесь, что вы заключили эти параметры в {}
  2. . Ruby динамически типизирован, поэтому вам не нужно говорить, что params - это хэш, когда вы определяете метод.
1
ответ дан 30 November 2019 в 06:22
поделиться

Поскольку Ruby набирается динамически, просто сделайте :

def my_method(arg1, arg2)
  #things
end

example:

my_method(:test, {:somehash => "yay"})

или

my_method :test, :somehash => "yay"

или

my_method(:test, :somehash => "yay")
0
ответ дан 30 November 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: