A.7 字符串--(附:Here Document处理技巧)

def hello(str1, str2)
 puts str1
 puts str2
end

hello("Ruby", <<-hello)
 hello!
    hello
这样写太恶心了,分明是糊弄人
这样写就一清二楚
hello(" theFirstArgument_str1", <<-formatString)
      theSecondArgument_str2
formatString
或者这样
hello("theFirstArgument_str1", <<-formatString)
________theSecondArgument_str2!!!
formatString

[ 本帖最后由 司徒正美 于 2008-12-18 02:54 编辑 ]
puts <<hello.insert(1, " hello") 
 hello
hello
注意到" hello"前的空白吗?看起来是用来分隔的,其实不是!它也是新字符串的一部分
以上输出为
 hello hello
第一个hello并不顶行,第二个hello前面也有空白(很明显是<<在起作用)
现在改一下,便识顾这骗局了!

puts <<format.insert(0,"insert")
123456string
format
输出
insert123456string

puts <<format.insert(1,"insert")
123456string
format
输出
1insert23456string

puts <<format.insert(2,"insert")
123456string
format
输出
12insert3456string

于是问题很简单
如果hello顶行的话,就相当于
puts <<format.insert(1,"insert")
format
123456string
insert就不是插入123456string这字符串中去了!
而是插入Nil对象里,于是报错 over!





[ 本帖最后由 司徒正美 于 2008-12-18 02:36 编辑 ]
第三个问题有点那啥,我无法通过解释器执行,版本升级的副作用吗?!