这个ruby代码段是做什么的?
作为一名ruby新手,我试图理解基线中的一段代码。有人能帮我吗?代码片段如下所示这个ruby代码段是做什么的?,ruby,Ruby,作为一名ruby新手,我试图理解基线中的一段代码。有人能帮我吗?代码片段如下所示 %w{word1 word2}.each { |att| define_method(att.to_sym) { return nil }} 在运行此行的上下文中,将定义两个方法 def word1 return nil end def word2 return nil end 比如说 class MyClass %w{word1 word2}.each { |att| define_method
%w{word1 word2}.each { |att| define_method(att.to_sym) { return nil }}
在运行此行的上下文中,将定义两个方法
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
%w{word1 word2}
=创建一个如下所示的数组['word1','word2']
.each
=迭代数组中的每个值{}
=这是一个代码块数组中的每个值都将通过该块运行|attr |
=块参数。数组中的每个值都将放在此处define\u method
=从参数定义方法(att.to_sym)
=新方法的名称。这将是word1
,然后是word2
{return nil}
=新方法的主体因此,您正在定义两种新方法。一种方法称为
word1
,另一种方法称为word2
。每种方法都有一个返回nil
的主体。它们将如下所示:
def word1
return nil
end
def word2
return nil
end
比如,对于教程,你最好在其他网站上阅读。以下是理解所提供代码所需的所有参考资料:
- ,用于
百分比字符串 除了创建的%w{word1 word2}
之外,%(…)
还可以 创建其他类型的对象。与字符串一样,大写字母 字母允许插入和转义字符,而 小写字母禁用它们 以下是ruby中百分比字符串的类型:%
:符号%i
:%q
:正则表达式%r
:%s
:字符串%w
:反勾选(捕获子shell结果)%x
如果您分别使用“(”、“[”、“{”、”,则可以使用大多数其他 百分比字符串分隔符的非字母数字字符 例如“%”、“|”、“^”等%w[one one-hundred\ one] #=> ["one", "one-hundred one"]
-
每个{|项|块}→ 阿利
每个→ 统计员
为
中的每个元素调用给定的块一次, 将该元素作为参数传递。返回数组 本身 如果未给出任何块,则返回一个self
产生:a = [ "a", "b", "c" ] a.each {|x| print x, " -- " }
a -- b -- c --
-
定义方法(符号、方法)→ 符号
定义方法(符号){block}→ 符号
在接收器中定义一个实例方法
参数可以是
、过程
或方法
对象。如果指定了块,则将其用作方法 body。使用取消绑定方法
计算此块instance\u 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
符号表示:xxx
'cat and dog'.to_sym #=> :"cat and dog"
%w
开始,这是一个“单词数组”。如果你能让你的irb工作,你也可以使用在线Ruby repl()。Codestyle建议使用%w[word1 word2]
而不是%w(word1 word2)
和%w{word1 word2}
这几乎使用了整个Ruby语言中的所有功能,您必须进一步缩小您的问题范围,否则答案基本上就是整个Ruby语言规范。虽然它似乎没有文档记录,但似乎。在这里没有必要使用to_sym
:定义方法(“dog”){“woof”};dog=>“woof”
。这并不奇怪,因为许多Ruby方法接受的参数是方法的名称,它们接受符号或字符串。请注意,块中不需要返回
。
"Koala".intern #=> :Koala
s = 'cat'.to_sym #=> :cat
s == :cat #=> true
s = '@cat'.to_sym #=> :@cat
s == :@cat #=> true
'cat and dog'.to_sym #=> :"cat and dog"