代码之家  ›  专栏  ›  技术社区  ›  collimarco

创建一个接受参数哈希的ruby方法

  •  63
  • collimarco  · 技术社区  · 17 年前

    我不知道如何创建一个接受参数哈希的ruby方法。我的意思是,在Rails中,我想使用这样的方法:

    login_success :msg => "Success!", :gotourl => user_url
    

    接受这种参数的方法的原型是什么?我该如何阅读它们?

    4 回复  |  直到 4 年前
        1
  •  67
  •   Allyn    17 年前

    如果你以哈希语法将参数传递给Ruby函数,Ruby会认为这是你的目标。因此:

    def login_success(hsh = {})
      puts hsh[:msg]
    end
    
        2
  •  33
  •   scottd    12 年前

    def login_success(name, hsh)
      puts "User #{name} logged in with #{hsh[:some_hash_key]}"
    end
    

    login_success "username", :time => Time.now, :some_hash_key => "some text"
    

    但是,如果哈希不是最后一个参数,则必须用{}包围哈希元素。

        3
  •  14
  •   user160917    11 年前

    随着关键字参数的出现 Ruby 2.0

    def login_success(msg:"Default", gotourl:"http://example.com")
      puts msg
      redirect_to gotourl
    end
    

    def login_success(msg:, gotourl:)
      puts msg
      redirect_to gotourl
    end
    

    ArgumentError

        4
  •  5
  •   CCD    13 年前

    def login_success arg
     # Your code here
    end
    
    login_success :msg => 'Success!', :gotourl => user_url
    # => login_success({:msg => 'Success!', :gotourl => user_url})
    

    如果你真的想确保得到一个哈希值,而不是默认的ruby duck类型,那么你需要控制它。例如:

    def login_success arg
      raise Exception.new('Argument not a Hash...') unless arg.is_a? Hash
      # Your code here
    end
    
    推荐文章