加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 未定义的方法’@’

发布时间:2020-12-17 04:01:48 所属栏目:百科 来源:网络整理
导读:我不明白为什么这不起作用;所有三个元素都应该是字符串. i = 5base = "somestring"base = i.to_s +" #{base} " + i.to_s # = Undefined method '+@' 为什么它将其解释为一种方法?我想也许它与设置base等于自身的一部分有关,但这似乎有效: base = "#{base}"
我不明白为什么这不起作用;所有三个元素都应该是字符串.

i = 5
base = "somestring"
base = i.to_s +" #{base} " + i.to_s # => Undefined method '+@'

为什么它将其解释为一种方法?我想也许它与设置base等于自身的一部分有关,但这似乎有效:

base = "#{base}"

解决方法

好问题!在ruby中,@方法定义了一元运算符的行为.换句话说,它定义了当你有一个像someSymbol这样的表达式时会发生什么.

因此,在这种情况下,它会看到表达式的一部分“#{base}”并尝试将一元方法应用于不存在的字符串.

尝试在字符串的开头和字符串的开头之间添加一个空格.

有趣的是,这只会在某些情况下发生.

i = 2
i.to_s +"foo" # => NoMethodError: undefined method `+@` for "foo":String
"2" +"foo"    # => "2foo"

发生什么了? i.to_s“foo”相当于i.to_s(“foo”).现在您可以看到为什么要调用一元函数而不是字符串连接运算符.

因此,您还可以使用其他选项来修复代码:

i.to_s() +" #{base} " + i.to_s

甚至

"#{i} #{base} #{i}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读