Ruby有一个内置方法的string.startswith("abc")吗?

Bla*_*man 195 ruby

Ruby有一个some_string.starts_with("abc")内置的方法吗?

Jör*_*tag 331

它被称为String#start_with?,而不是String#startswith:在Ruby中,boolean-ish方法的名称以#结尾,?方法名称中的单词用a分隔_.不知道s去哪儿,个人而言,我更喜欢String#starts_with?实际的String#start_with?

  • @AndrewGrimm唯一的问题是"一个字符串"是第三人称单数!(Ergo,'s'不应该被丢弃). (10认同)
  • Matz说他更喜欢没有s,因为它看起来像第二人称单数或第三人称复数. (9认同)
  • 串#start_with?在ruby 1.8.7和1.9.0中引入 - 对于旧版本,您可能希望使用其他答案中提到的正则表达式或索引版本之一. (5认同)
  • 在Rails中,你可以使用String#starts_with? (3认同)
  • @anthropomorphic https://github.com/rails/rails/blob/e20dd73df42d63b206d221e2258cc6dc7b1e6068/activesupport/lib/active_support/core_ext/string/starts_ends_with.rb; 它是String#start_with的别名? (3认同)
  • @ user456584你用英语思考,而不是日语. (3认同)
  • 如果您认为 Ruby 范式是受 Smalltalk 启发的,那么 Matz 的方法就有意义了。方法调用本质上是“发送消息”。在本例中,询问字符串“你以 <foo> 开头吗?” (2认同)

Ale*_*lex 41

你的问题标题和你的问题正文是不同的.Ruby没有starts_with?方法.Rails的,这是一个Ruby 框架,但是,的确,作为sepp2k状态.请参阅他对其答案的评论,以获取该文档的链接.

你总是可以使用正则表达式:

if SomeString.match(/^abc/) 
   # SomeString starts with abc
Run Code Online (Sandbox Code Playgroud)

^ 表示正则表达式中的"字符串开头"

  • @steenslag - ruby​​ 1.8.7也有start_with? - [documentation](http://rubydoc.info/stdlib/core/1.8.7/String#start_with%3F-instance_method)和[1.8.7发行说明](http://svn.ruby-lang.org/回购/红宝石/标签/ v1_8_7/NEWS) (4认同)

Lar*_*eth 17

如果这是一个非Rails项目,我会使用String#index:

"foobar".index("foo") == 0  # => true
Run Code Online (Sandbox Code Playgroud)

  • 然而,这将是更加性能密集的,因为`start_with?`方法可以简单地确认字符串的开头与给定的字符串匹配 - 因此最多处理*n*个字符,其中*n*是该字符串的长度给定字符串 - 而`索引`必须搜索整个基本字符串.在一个失败的情况下,`starts_with?`将进行一次访问(每个字符串)和比较,而`index`将几乎走遍基本字符串的全长. (9认同)

Nak*_*lon 5

你可以用String =~ Regex.它返回字符串中完整正则表达式匹配的位置.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false
Run Code Online (Sandbox Code Playgroud)