《Ruby for Rails 中文版》070924

第四章 对象和方法

如想列出一个对象固有的方法和清单,可以调用methods方法:p Object.new.methods.sort

对象固有行为
每个对象都有一个唯一的id值。想要看到对象的id值可以在irb:
obj = Object.new
puts "The id of obj is #{obj.object_id}"

respond_to?和send方法
使用respond_to?可以事先判断对象是否能响应给定的消息
obj = Object.new
if obj.respond_to?("talk")
    obj.talk
else
    puts "sorry..."
end
(.)是 用来发送消息的,send实现的功能是完全相同的,可用另一个调用send的办法:_send_
if ticket.respond_to?(request)
    puts ticket.send(request)
else
    puts "no..."
end

必需参数、可选参数及默认参数
def two_or_more(a,b,*c)
a和b是必要参数。*c收集其他所有可能发送给该方法的参数,并将它们放在变量c的数组中。如果想要包含可选参数(*x),那么它必须放在任何飞可选参数的后面

局部变量和变量赋值
def say_goodbye
    x = "Goodbye"
    puts x
end
def start_here
    x = "Hello"
    puts x
    say_goodbye
    puts "Let's check whether x remained the same:"
    puts x
end
start_here
输出:
Hello
Goodbye
Let's check whether x remained the same:
Hello
由此可见,在一个方法的作用域中使用x作为局部变量名不会影响x在另一个方法作用域中的值,局部变量的这种行为特性是由Ruby处理作用域的机制决定的。

变量的重新赋值:
a = Object.new
b= a
尽管变量a和b是不同的变量,但它们引用的是同一个对象
string_1 = "Hello"
string_2 = "Hello"
尽管这两个字符串包含同样的文本,但是他们不是同一个对象,Ruby中的变量不保存对象的值,而是包含了一个到字符串对象的引用。
str = "Hello"
abc = str
str = "Goodbye"
puts str
puts abc
输出:
Goodbye
Hello
在对str进行第二次赋值时,str获得了另外一个字符串对象的引用。从这开始,str和abc互不关联。abc仍然指向旧的字符串。

你可能感兴趣的:(C++,c,C#,Ruby,Rails)