我是Ruby的新手。如何声明如下所示的方法:
a.method("hello" => "bye")
如何访问此方法的Key和值?有没有一个很好的资源来回答这些类型的问题? Ruby语法对我来说有点奇怪。
答案 0 :(得分:1)
我想你不明白"hello" => "bye"
是什么。这是一个哈希(就像其他语言中的字典一样)。我们在ruby中声明hash,如下所示:{"key" => "value"}
。这是最常用的方式。 Hash.new("key" => "value")
也有效。在这里,您的方法将哈希作为参数。它可以在类中声明:
class YourClass
# you don't need to specify type of parameter because variables in ruby are dynamic
def method(your_param)
# the code bellow will iterate your hash and show each key and value in this hash
your_param.each do |value, key|
puts key + " : " + value
end
# you can also access to a value in the hash if you know the key
puts your_param['hello']
end
end
然后,您可以像a = YourClass.new
一样实例化您的类,然后将哈希值传递给您的方法a.method({"hello" => "bye"})
。在这里,正如您所看到的,hash将在{}
之间声明,但ruby呈现此可选规则,如果方法的最后一个参数是哈希,则可以省略{}
。
关于ruby中的方法:如果你有一个类YourClass
,你可以用def method ... end
声明一个实例方法(这意味着你应该只用这个类的实例调用这个方法)或者你可以声明一个类方法,你直接使用类YourClass.method
之类的名称来调用它(这意味着你可以调用这个方法而无需实例化你的类,它就像c#等其他语言中的共享方法。)
答案 1 :(得分:1)
如何访问此方法的Key和值?有没有一个很好的资源来回答这些类型的问题? Ruby语法对我来说有点奇怪。
是的,当你不承认它时,Ruby语法很奇怪,但是一旦掌握了它就会变得有趣和强大。 Ruby为哈希和数组提供了非常简洁且可能令人困惑的语法。
例如,通常通过以下语法生成数组:
x = [1, 2, 3]
但你可以缩短到:
x = 1, 2, 3
在您的情况下,通常该方法可以被称为:
a.method( { "hello" => "bye" } )
也可以按照问题代码中的定义调用它。事实是,在这种情况下,没有含糊不清,因为两个String
与=>
配对只能 意味着您正在生成Hash
。
这意味着要重现它,您只需创建一个接受哈希并处理值的方法:
def method( hash )
# hash.keys.first is how you can access the key ( "hello" )
# hash.first is how you can access the value ( "bye" )
end
现在,您必须记住,使用上述方法,任何使用它的人也可能传递多个值(多个)甚至是非哈希参数,您可以选择忽略或交易 with,如下例所示:
def method( hash )
raise ArgumentError "..." unless hash.is_a? Enumerable
raise ArgumentError "..." if hash.size > 1
# ...
end
如果无法枚举哈希,则在第一行引发异常(如Hash
es do)。在第二个中,您检查哈希中键值的数量,如果它超过一个则引发异常。
最后需要注意的是,您不能为该方法使用多个参数,并期望它能够使用该语法:
def method( hash, a ); end
method( "hello" => "bye", 1 )
# => SyntaxError: syntax error, unexpected ')'
尽管如此,可以使用
解决method( { "hello" => "bye" }, 1 )
玩得开心。
答案 2 :(得分:0)
您可以将 hash 传递给方法,然后像这样获取 key , value
def method(hsh = {})
key = hsh.keys.first
value = hsh[key]
puts key, value
end
method("hello" => "bye")
答案 3 :(得分:0)
您可以确认该方法接收哈希值,并查看键和值,如下所示:
def mthd(h)
p h
p h.keys
p.h.values
end
mthd("hello" => "bye") # => {"hello"=>"bye"}\n["hello"]\n["bye"]
更重要的问题是该方法应该在您的架构中实现什么。
答案 4 :(得分:0)
像这样:
Cow = Object.new
class Say < Hash
def declare!
each_pair do |who, what|
who.define_singleton_method :say do what end
end
end
end
Say[ Cow => "hello" ].declare!
Cow.say #=> "hello"