ruby句法問題

發表于:2007-07-04來源:作者:點擊數: 標簽:
4.1 像:exit這種帶:的標識符表示什么? 它叫做符號對象,它與標識符之間是1對1的關系。您也可以使用"exit".intern來得到它。在catch, throw, autoload等方法中,既可以使用字符串參數,又可以使用符號參數。 4.2 如何取得與符號同名的變量的值? 在symbol的作
4.1 像:exit這種帶:的標識符表示什么?

它叫做符號對象,它與標識符之間是1對1的關系。您也可以使用"exit".intern來得到它。在catch, throw, autoload等方法中,既可以使用字符串參數,又可以使用符號參數。

4.2 如何取得與符號同名的變量的值?

在symbol的作用域內,使用eval((:symbol).id2name)來取值。

a = 'This is the content of "a"' b = eval(:a.id2name) a.id == b.id 4.3 loop是控制結構嗎?

不,它是方法。該塊會導入新的局部變量的作用域。

4.4 a +b報錯,這是怎么回事兒?

它會被解釋成a(+b)。+的兩側要么都有空格,要么就都沒有。

4.5 s = "x"; puts s *10 報錯,這是怎么回事兒?

puts s *10會被解釋成s(*10)的方法調用,所以要么s*10這樣,要么s * 10這樣。

4.6 為什么p {}沒有任何顯示呢?

{}會被解釋成塊,而并非哈希表的構造函數。所以您需要使用p({})或者p Hash.new來解決這個問題。

4.7 明明有pos=()這樣的setter方法,可為什么pos=1時卻沒有任何反應呢?

請看下例。

class C attr_reader :pos def pos=(n) @pos = n * 3 end def set pos = 1 #A行 end end a = C.new a.set p a.pos #=> nil (預期值是 3)

本來指望最后一行能輸出 3,但卻是個 nil ,這是因為Ruby把A行的pos解釋成局部變量了。若想調用pos=()的話,請這樣self.pos = 1調用。

4.8 '\1'和'\\1'有什么不同?

沒有不同,二者完全一樣。在單引號中,只有\'、\\和行尾的\(取消換行)會得到特殊的解釋,其他字符不變。

4.9 在p true or true and false中會顯示true,但在a=true if true or true and false中卻不會把true賦值給a。

第1個表達式會被解釋成(p true) or true and false,其中的and/or是構成語句的要素,而并不是用來連接p的參數的操作符。

第2個表達是則會被解釋成a=true if (true or true and false)。因為if的優先度低于and/or,且or與and的優先度相同,所以就會從左到右地完成解析。

4.10 為什么p(nil || "")什么事兒都沒有,可p(nil or "")卻會報錯呢?

雖然||可以連接參數,但or就只能連接句子,所以如此。關于這點區別,您試一試下面的例子就明白了。

p nil || "" p nil or ""

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97