赞 | 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{ ...} 的字符串字面值。- @str = 'foo'
- puts %s{@str} # => @str
- puts %s{#@str} # => #@str
- puts %s{#{@str}} # => #{@str}
复制代码 只有冒號 + 雙引號形式所表示的符號可以接受字符串內插求值:另外,%s 不一定非得使用 { ... } 作為分隔符。以下都是合法的符號字面值:- %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=
复制代码 基本上常用的特殊符號都可以用作分隔符。 |
评分
-
查看全部评分
|