对ruby有几个不明白的地方
当前位置:首页 ----> Web开发 ----> Ruby/Python
关键词:ruby,puts lisa,super,People,Object,raise
ttitfly:
1.+号 class People
 def initialize(name, age)
 @name = name
 @age = age
 end
 
 def to_s
 "name = #{@name}, age = #{@age}"
 end
end

lily = People.new("Lily", 18)
puts lily

class Teacher < People
 def initialize(name, age, gender)
 super(name, age)
 @gender = gender
 
 end
 
 def to_s
 super + ", gender = #{@gender}"
 end
end

lisa = Teacher.new("Lisa", 28, "female")
puts lisa 这段代码里对super + ", gender = #{@gender}" 里的+号不太明白。super应当是指父类People,父类People里并没有+这个方法,并且所有类的父类Object类里也没有。 2.Exception:raise关键字  e
 puts e
else
 puts "Congratulations! No errors."
ensure
 puts "Here we go."
end


chinapkw:
super 就是先调用父类里的同名方法 即调用父类里的to_s


ttitfly:
super + ", gender = #{@gender}" 这里的+换成,(逗号)为什麽不行呢? test = "aaa","bbb" puts(test) 输出为 aaa换行bbb ,逗号也是起到连接作用吗?


chenjinlai:
那个puts是把错误打印出来啊错误是个字符串


dongguoh:
ttitfly 写道super + ", gender = #{@gender}" 这里的+换成,(逗号)为什麽不行呢? test = "aaa","bbb" puts(test) 输出为 aaa换行bbb ,逗号也是起到连接作用吗? 我以为 super+ 的意思应当是 父类中的to_s方法,还有我在用scite的时候假如在 + 号后面不加空格的话有时候会出错


9esuLuciano:
ttitfly 写道1.+号 class People
 def initialize(name, age)
 @name = name
 @age = age
 end
 
 def to_s
 "name = #{@name}, age = #{@age}"
 end
end

lily = People.new("Lily", 18)
puts lily

class Teacher < People
 def initialize(name, age, gender)
 super(name, age)
 @gender = gender
 
 end
 
 def to_s
 super + ", gender = #{@gender}"
 end
end

lisa = Teacher.new("Lisa", 28, "female")
puts lisa 这段代码里对super + ", gender = #{@gender}" 里的+号不太明白。super应当是指父类People,父类People里并没有+这个方法,并且所有类的父类Object类里也没有。 2.Exception:raise关键字  e
 puts e
else
 puts "Congratulations! No errors."
ensure
 puts "Here we go."
end '+' 是String类的实例方法,调用String.instance_methods可以看到 raise 后面是自定义的异常信息


ttitfly:
super + ", gender = #{@gender}"  这里的+换成,(逗号)为什麽不行呢?  test = "aaa","bbb"  puts(test)  输出为 aaa换行bbb ,逗号也是起到连接作用吗?  逗号和+(加号)的区别在哪里呢?


sina2009:
super + ", gender = #{@gender}" super调用父类的to_s 父类的to_s返回string+就是起连接作用,省掉了return test = "aaa","bbb"  puts(test)  这是ruby的并行赋值,假如赋值语句仅有一个左值而有多个右值,那么右值将被转换成数组,然后赋值给左值 所以test=["aaa","bbb"]


9esuLuciano:
sina2009 写道super + ", gender = #{@gender}" super调用父类的to_s 父类的to_s返回string+就是起连接作用,省掉了return test = "aaa","bbb"  puts(test)  这是ruby的并行赋值,假如赋值语句仅有一个左值而有多个右值,那么右值将被转换成数组,然后赋值给左值 所以test=["aaa","bbb"] 同意sina2009 在一个方法中调用super,相当于调用父类的同名方法 所在在Teacher类的to_s中使用super class People   def to_s   "name = #{@name}, age = #{@age}"   end  end class Teacher < People   def to_s   super + ", gender = #{@gender}"   end  end  相当于调用了父类People中的to_s方法,返回一个字符串,这个字符串调用'+'方法,传入转义后的",gender = #{@gender}"字符串作为参数,返回一个拼接后的字符串 至于为什麽','也可以,原因sina2009说的非常清楚


9esuLuciano:
9esuLuciano 写道sina2009 写道super + ", gender = #{@gender}" super调用父类的to_s 父类的to_s返回string+就是起连接作用,省掉了return test = "aaa","bbb"  puts(test)  这是ruby的并行赋值,假如赋值语句仅有一个左值而有多个右值,那么右值将被转换成数组,然后赋值给左值 所以test=["aaa","bbb"] 同意sina2009 在一个方法中调用super,相当于调用父类的同名方法 所在在Teacher类的to_s中使用super class People   def to_s   "name = #{@name}, age = #{@age}"   end  end class Teacher < People   def to_s   super + ", gender = #{@gender}"   end  end  相当于调用了父类People中的to_s方法,返回一个字符串,这个字符串调用'+'方法,传入转义后的",gender = #{@gender}"字符串作为参数,返回一个拼接后的字符串 至于为什麽','也可以,原因sina2009说的非常清楚 多说一句,假如一定要用',',在把to_s改成 return super , ", gender = #{@gender}"


ttitfly:
def to_s
 super + ", gender = #{@gender}"
 end把这段代码改成: def to_s
 super , ", gender = #{@gender}"
 end 是有错误的


9esuLuciano:
ttitfly 写道def to_s
 super + ", gender = #{@gender}"
 end把这段代码改成: def to_s
 super , ", gender = #{@gender}"
 end 是有错误的 前面加上return 改成 def to_s
 return super , ", gender = #{@gender}"
 end


ttitfly:
def to_s
 return super + ", gender = #{@gender}"
 end 输出结果为:name = Lisa, age = 28, gender = female +(加号时),return 要不要都可以  def to_s
 return super , ", gender = #{@gender}"
 end  ,(逗号)时,return 必须要 为什麽不同呢?


9esuLuciano:
ttitfly 写道 def to_s
 return super + ", gender = #{@gender}"
 end 输出结果为:name = Lisa, age = 28, gender = female +(加号时),return 要不要都可以  def to_s
 return super , ", gender = #{@gender}"
 end  ,(逗号)时,return 必须要 为什麽不同呢?return var1,var2是并行赋值 直接写var1,var2 ruby里面是没有这样语法的 var1+var2是一个表达式 ruby中假如函数最后一条语句是表达式的话,会把表达式求值的结果自动返回,不需要加return


ttitfly:
def to_s 
 return super , ", gender = #{@gender}" 
 end  ?
原文出处:http://www.javaeye.com/topic/125709