Метод использования Ruby, только если условие истинно - PullRequest
0 голосов
/ 18 мая 2010

Итак, у меня есть этот код:

class Door

    # ...

    def info attr = ""

        return {

            "width" => @width,
            "height" => @height,
            "color" => @color

        }[attr] if attr != ""

    end

end

mydoor = Door.new(100, 100, "red")

puts mydoor.info("width")

puts mydoor.info

Метод "info" должен возвращать хеш, если аргумент не предоставлен, в противном случае значение аргумента в хэше. Как мне этого добиться?

Ответы [ 4 ]

5 голосов
/ 18 мая 2010
def info(arg = nil)
  info = {"width" => @width,
          "height" => @height,
          "color" => @color}
  info[arg] || info
end
0 голосов
/ 19 мая 2010

Если вы хотите вернуть переменную экземпляра, указанную в аргументе, вы можете попробовать это:

def info(atr=nil)
    [:a, :b, :c].include?(atr.to_sym) ? instance_variable_get(atr) : nil
end

Эта возвращаемая переменная экземпляра, если она содержится в массиве [:a, :b, :c]. Это из соображений безопасности, вы не хотите возвращать какую-либо переменную экземпляра.

0 голосов
/ 18 мая 2010
def info(attr="")
    case attr
        when "width" then return @width
        when "height" then return @height
        when "color" then return @color
        else return {"width"=>@width, "height"=>@height, "color"=>@color}
    end
end
0 голосов
/ 18 мая 2010
def info (arg1 = @width, arg2 = @height, arg3 = @color)
  "#{arg1}, #{arg2}, #{arg3}."
end

, который должен направить вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...