代码之家  ›  专栏  ›  技术社区  ›  pierrotlefou

同一表达式在IRB中执行两次时产生不同的值。

  •  4
  • pierrotlefou  · 技术社区  · 14 年前
    irb(main):051:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")  
    => "ts_id > ?"
    irb(main):052:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
    => "ts_id < ?"
    

    有人能启发我吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Chuck    14 年前

    问题是变量 $1 插入到参数字符串中 之前 gsub 是跑步,意思是 以前的 价值 1美元 符号将被替换为。您可以将第二个参数替换为 '\1 ?' 达到预期效果。

        2
  •  2
  •   Nakilon earlonrails    14 年前
    irb(main):001:0>  "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
    => "ts_id  ?"
    irb(main):002:0>  "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,"#{$1} ?")
    => "ts_id < ?"
    

    注意,我使用了新启动的IRB,其中 $1 nil . 这都是因为当使用 .gsub(...,..$1..) ,当计算“零件正从 , 1美元 不是由“左部分来自”生成的 , “可是。

    这样做:

    irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/,'\1 ?')
    => "ts_id < ?"
    

    或者这个:

    irb(main):001:0> "ts_id < what".gsub(/(=|<|>)\s?(\w+|\?)/){"#{$1} ?"}
    => "ts_id < ?"