对ruby有几个不明白的地方
关键词: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
?