我已经看过这一个Why are there so many slightly different ways to do the same thing in Ruby?,但它没有帮助。对于相同的事物具有多个稍微不同的语义和语法是恕我直言,令人困惑和适得其反。我试图找到一些关于为什么会这样的规范或理由,但是它们无处可寻(与Java和Python不同,其中每个语言特征都有很好的记录和动机等。)
这不仅仅是String,它就是一切。我正在寻找的是一个通用的解释,为什么日本人认为有100种方法做同样的事情比一种明确的方式更好。请记住,我们谈论的是编程语言,这不是乐器或油漆刷,它是完成工作并在此过程中获得乐趣的工具。阅读一些代码并想知道为什么她使用%<hello kitty>
代替"hello kitty"
并不是很有趣,特别是当你在寻找一个bug时。
我看到了标准化的好处,这是一个相关的概念。我希望其他人都这样做。为什么Ruby不支持100个版本的自定义HTTP协议,出于同样的原因,它们支持100种创建String的方法?
答案 0 :(得分:3)
创建字符串的方法有很多种,因为有很多原因可能需要字符串。由于字符串是许多应用程序的支柱,因此这种设施是健壮且多变的。
一旦你习惯了它,你会发现其他语言中的严格引用系统比任何东西都更令人讨厌。 HTML通常需要对嵌入式JavaScript或其他属性使用单'
和双"
引号,除非您希望通过在其中任何一个之前加入反斜杠\
来将字符串渲染为不可读的纸浆使用%q[ ... ]
类型的引用方法会更好。
任何好的工具箱都有各种各样的工具。不要抱怨你的扳手组件有些混乱,因为它有许多不同尺寸的扳手。有时候你需要一个特定的,然后你会感激不尽。其中许多方法都是从Perl这样的语言中借用的,而Perl的灵感来自其他类似bash的东西。
典型用例:
double_quotes = "typical use case with #{variables}"
single_quotes = 'strict string literals'
alternate_double_quotes = %Q[<for html="tags('with both quotes', 'and #{variables}')">]
alternate_single_quotes = %q[<for html="tags('with both quotes')">]
inline_string = <<END
Useful for long blocks of freeform
text such as sample data or templates.
END
我发现在尝试表达包含引号的多行字符串时,%q[ ... ]
方法会派上用场,就像SQL一样:
execute(%q[
INSERT INTO examples (id, feature_code)
SELECT id, CONCAT('example_', feature_code)
FROM things
GROUP BY foo
ORDER BY bar
])
发现[ ... ]
配对相对容易,但是当你有很多转义引号时却不那么容易。除非您有语法高亮编辑器,否则很容易错过结束语。