| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 7 |  
| 积分 | 1 |  
| 经验 | 5012 |  
| 最后登录 | 2014-2-28 |  
| 在线时间 | 163 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间163 小时注册时间2011-11-12帖子56 | 
| ppipip110 发表于 2012-4-5 13:32 ![]() 是比较啊大哥,字符串和对象不是不能比较吗?所以就要转换一下,to_s和to_sym是在字符串与符号间转换,但 ...
抱歉,沒看清楚你前半句,只看到了語意不明的後半句。to_s 返回 String,%s 的字面值返回 Symbol,要比較 String 和 Symbol 的話,只需要將 String 轉換為 Symbol 就行了。
 
 
 但是据说还有个%s{}貌似可以在字符串与对象间转换,我主要是想知道这是不是真的。
 短的回答:不是。
 
 長的回答:%s 確實是 Ruby 的語言結構。這種以百分號 + 分隔符形式表示的字面值來源於 Perl,而在 Ruby 中,%s 則是符號的字面值。然而,它並沒有「在字符串與對象間轉換」,它是在語法分析時就已經生成的常量,其間並沒有任何轉換的過程。%s{ ... } 內部的單詞是靜態數據,並非動態的 Ruby 字符串,反過來講,你也不能通過這種方式把運行時的字符串對象轉換為符號,這一點類似單引號 ' ... ' 或 %q{ ...} 的字符串字面值。
 只有冒號 + 雙引號形式所表示的符號可以接受字符串內插求值:另外,%s 不一定非得使用 { ... } 作為分隔符。以下都是合法的符號字面值:复制代码@str = 'foo'
puts %s{@str}     # => @str
puts %s{#@str}    # => #@str
puts %s{#{@str}}  # => #{@str}
基本上常用的特殊符號都可以用作分隔符。复制代码%s[foo]
%s<foo>
%s(foo)
%s/foo/
%s\foo\
%s'foo'
%s"foo#{1+1}"
%s?foo?
%s,foo,
%s.foo.
%s!foo!
%s@foo@
%s#foo#
%s$foo$
%s%foo%
%s^foo^
%s^foo^
%s|foo|
%s~foo~
%s`foo`
%s&foo&
%s*foo*
%s-foo-
%s_foo_
%s+foo+
%s=foo=
 | 
 评分
查看全部评分
 |