作为一名红宝石新手,我试图了解我们基线中的一小段代码。有人可以帮我吗?该代码段显示在下面
%w{word1 word2}.each { |att| define_method(att.to_sym) { return nil }}
答案 0 :(得分:2)
在将要运行此行的上下文中,将定义两个方法
def word1
return nil
end
def word2
return nil
end
例如
class MyClass
%w{word1 word2}.each { |att| define_method(att.to_sym) { return nil }}
end
在加载my_class.rb文件之后,您将可以使用生成的方法
test = MyClass.new
test.word1
# or
test.word2
答案 1 :(得分:2)
像jdv said in the comments一样,对于教程来说,在其他网站上可能会更好。这里是理解所提供代码段所需的所有参考:
Percent strings,用于%w{word1 word2}
字符串百分比
除了创建String的
%(...)
之外,%
可能 创建其他类型的对象。与字符串一样,大写 字母允许插值和转义字符,而 小写字母禁用它们。以下是Ruby中百分比字符串的类型:
对于百分比字符串的两种数组形式,如果您希望 在您必须转义的数组条目之一中包含空格 它带有“ \”字符:
%w[one one-hundred\ one] #=> ["one", "one-hundred one"]
如果使用“(”,“ [”,“ {”,“ <”,则必须使用 分别为“)”,“]”,“}”,“>”。您可以使用其他大多数东西 字符串分隔符百分比的非字母数字字符 例如“%”,“ |”,“ ^”等。
每个{|项目|阻止}→ary
每个→枚举器
为
self
中的每个元素调用给定的块一次, 将该元素作为参数传递。返回数组 本身。如果没有给出块,则返回Enumerator。
a = [ "a", "b", "c" ] a.each {|x| print x, " -- " }
产生:
a -- b -- c --
define_method(符号,方法)→符号
define_method(symbol){块}→符号
在接收器中定义实例方法。 方法 参数可以是
Proc
,Method
或UnboundMethod
宾语。如果指定了块,则将其用作方法 身体。此区块使用instance_eval
进行评估。class A def fred puts "In Fred" end def create_method(name, &block) self.class.define_method(name, &block) end define_method(:wilma) { puts "Charge it!" } end class B < A define_method(:barney, instance_method(:fred)) end a = B.new a.barney a.wilma a.create_method(:betty) { p self } a.betty
产生:
In Fred Charge it! #<B:0x401b39e8>
to_sym→符号
返回与 str 对应的
Symbol
,创建 符号(如果以前不存在)。参见Symbol#id2name
。"Koala".intern #=> :Koala s = 'cat'.to_sym #=> :cat s == :cat #=> true s = '@cat'.to_sym #=> :@cat s == :@cat #=> true
这也可以用来创建不能 用
:xxx
表示。'cat and dog'.to_sym #=> :"cat and dog"
答案 2 :(得分:1)
%w{word1 word2}
=创建一个看起来像['word1', 'word2']
的数组
.each
=遍历数组中的每个值
{}
=这是一个代码块,数组中的每个值都将通过该块运行
|attr|
=块参数。数组中的每个值都将放在这里
define_method
=通过参数定义方法
(att.to_sym)
=新方法的名称。这将是word1
,然后是word2
{ return nil }
=新方法的主体
因此,正在发生的事情是您正在定义两个新方法。一种方法称为word1
,另一种方法称为word2
。这些方法中的每一个将具有return nil
的主体。它们将如下所示:
def word1
return nil
end
def word2
return nil
end