- 浏览: 52075 次
文章列表
Invoking a Method on An Object
first = text.index(pattern)
这段代码把pattern变量传递给index方法,index方法属于一个存储在text变量中的对象,返回值被存储到变量first中。
单键方法
o = "message" # 在字符串对象上定义它独有的方法
def o.printme
puts self
end
o.printme
Math.sin, File.delete这样的类方法,实际上是单键方法。Math是一个常量,它引用一个moduel对象 ...
Ruby中的inject
- 博客分类:
- Ruby
结论:
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数付值给它,element就是数组中的元素,该例中inject一共执行4次block,每次执行block完后,最后语句的结果再付值给result,如此循环,直到遍历数组中所有元素。
[1, 2, 3, 4].inject{ |resul ...
闭包的一个重要特征是:过程(方法)内部定义的变量,即使在方法调用完成以后,仍然可以继续引用到。
def method(n)
puts "n=#{n}"; #测试用
return proc{|i| n +=i } #关键:proc是一个过程对象,只能由"委托"用call来调用,这里在过程内部引用了参数变量n,将会在多次call该过程后,保留对n的引用,形成闭包!
end
aDelegate = method(0);#可以理解为c#中的委托,同时该语句会初始化n为0
puts aDelegate.call(1); ...
==,===,eql?,equal? 都有些啥区别
Equality (==, eql?, equal?)
== 普通的相等,不对object_id是否相等进行检查
eql? 和 == 是相同的, equal?则是要对object_id是否相等进行检查
“test” == "test" #=> return true,因为两者的值相等
“test"equal?("test") #=> return false 因为两者的值虽然相等,但两者的object_id不相等
...
Ruby 奇怪的赋值问题
- 博客分类:
- Ruby
结论: 赋值 非 拷贝
Ruby1.9.3
例1
a = [1,2,3]
b = a #只是引用,不是拷贝
a << 4
puts a #=> [1,2,3,4]
puts b #=> [1,2,3,4]
例2
a = [1,2,3]
b = a
b << 4
puts a #=> [1,2,3,4]
puts b #=> [1,2,3,4]
例3
a = [1,2,3]
b = a
b = [] #=& ...
Ruby 循环中的变量选择:局部变量还是实例变量
- 博客分类:
- Ruby
From the ruby programming language.Blocks and Variable ScopeBlocks define a new variable scope: variables created within a block exist only within that block and are undefined outside of the block.
Be cautious, however; the local variables in a method are available to any blocks within that meth ...