如何在ruby中使用string方法“[]”

如何在ruby中使用string方法“[]”,ruby,Ruby,第一行返回NilClass,第二行返回String。Ruby方法String#[n]返回单个字符串,String#[m,n]从字符串返回子字符串。这是否意味着单个字符串与子字符串不同?请遵循以下代码: 2.0.0p247 :069 > str[str.length].class => NilClass 2.0.0p247 :071 > str[str.length, 1].class => String 2.0.0p247 :072 > str[str.leng

第一行返回
NilClass
,第二行返回
String
。Ruby方法
String#[n]
返回单个字符串,
String#[m,n]
从字符串返回子字符串。这是否意味着单个字符串与子字符串不同?

请遵循以下代码:

2.0.0p247 :069 > str[str.length].class
=> NilClass 
2.0.0p247 :071 > str[str.length, 1].class
=> String 
2.0.0p247 :072 > str[str.length, 2].class
=> String 
2.0.0p247 :073 > str[str.length+ 1, 2].class
=> NilClass 
文件:

元素引用-(a)如果传递了单个索引,则返回该索引处一个字符的子字符串。(b)如果传递了开始索引和长度,则返回包含从该索引处开始的长度字符的子字符串

适用于以上两种情况-如果索引为负数,则从字符串末尾开始计数。对于起始和范围大小写,起始索引正好位于字符和与字符串大小匹配的索引之前(c)此外,当字符范围的起始索引位于字符串末尾时,将返回空字符串。

(d) 如果初始索引超出字符串范围或长度为负,则返回nil

  • 为什么
    s[s.size]#=>nil
因为在索引
3
中没有字符,所以返回
nil
(应用规则-a)。规则-a表示,如果存在,则从指定索引返回字符;如果未找到,则返回
nil

  • 为什么
    s[s.size,1]#=>“”
因为这直接进入规则c

  • 为什么
    s[s.size+1,1]#=>nil
因为规则d是这样说的

nil
Nilclass
的一个实例,
'
空字符串是string类的一个实例。因此,您得到的都是有效的

s = "abc"
s[s.size] # => nil
s[s.size,1] # => ""
s.size # => 3

请遵循以下代码:

2.0.0p247 :069 > str[str.length].class
=> NilClass 
2.0.0p247 :071 > str[str.length, 1].class
=> String 
2.0.0p247 :072 > str[str.length, 2].class
=> String 
2.0.0p247 :073 > str[str.length+ 1, 2].class
=> NilClass 
文件:

元素引用-(a)如果传递了单个索引,则返回该索引处一个字符的子字符串。(b)如果传递了开始索引和长度,则返回包含从该索引处开始的长度字符的子字符串

适用于以上两种情况-如果索引为负数,则从字符串末尾开始计数。对于起始和范围大小写,起始索引正好位于字符和与字符串大小匹配的索引之前(c)此外,当字符范围的起始索引位于字符串末尾时,将返回空字符串。

(d) 如果初始索引超出字符串范围或长度为负,则返回nil

  • 为什么
    s[s.size]#=>nil
因为在索引
3
中没有字符,所以返回
nil
(应用规则-a)。规则-a表示,如果存在,则从指定索引返回字符;如果未找到,则返回
nil

  • 为什么
    s[s.size,1]#=>“”
因为这直接进入规则c

  • 为什么
    s[s.size+1,1]#=>nil
因为规则d是这样说的

nil
Nilclass
的一个实例,
'
空字符串是string类的一个实例。因此,您得到的都是有效的

s = "abc"
s[s.size] # => nil
s[s.size,1] # => ""
s.size # => 3
这是否意味着单个字符串与子字符串不同

不。这意味着根据传递给它的参数,它的行为会有所不同

您正在尝试访问字符串的最后一个字符

s = "abc"
s[s.size].class # => NilClass
s[s.size,1].class # => String
返回
nil
,因为那里没有字符

国家:

如果初始索引超出字符串范围或长度为负数,则返回
nil

返回最后一个字符,然后

str[-1]
返回
字符串

同样地

str[-1].class
返回空字符串

同样,各国(强调我国):

如果传递了
开始
索引和
长度
返回包含从索引开始的
长度
字符的子字符串

由于
str
的结尾不再有字符,因此此子字符串为空

这是否意味着单个字符串与子字符串不同

不。这意味着根据传递给它的参数,它的行为会有所不同

您正在尝试访问字符串的最后一个字符

s = "abc"
s[s.size].class # => NilClass
s[s.size,1].class # => String
返回
nil
,因为那里没有字符

国家:

如果初始索引超出字符串范围或长度为负数,则返回
nil

返回最后一个字符,然后

str[-1]
返回
字符串

同样地

str[-1].class
返回空字符串

同样,各国(强调我国):

如果传递了
开始
索引和
长度
返回包含从索引开始的
长度
字符的子字符串


由于
str
的结尾不再有字符,因此此子字符串是空的。

但是为什么
s[s.size+1,1]#=>nil
不是空字符串,规则-b应该应用它。@jsvisa来自:“如果初始索引超出字符串或长度为负,则返回
nil
。@stefan但是
s[s.size,1]
也应为
nil
,因为
s.size
不属于string@tihom“此外,当字符范围的起始索引位于字符串末尾时,将返回一个空字符串。”@Stefan不适用于
str[range]
str[start,length]
,我猜不是从这里的结果,但这听起来不正确,但为什么
s[s.size+1,1]#=>nil
不是空字符串,规则-b应该应用它。@jsvisa来自:“如果初始索引超出字符串或长度为负,则返回
nil
。@stefan但是
s[s.size,1]
也应为
nil
,因为
s.size
不在