虽然我是Ruby新手,但我通过反复试验为Ruby编写了许多插件。
我尝试了许多不同的语法变体,导致:
Unexpected else or end, expecting }
@reUrl
将最终= "@reUrl2"
任何帮助将不胜感激。
以下是我的代码的摘录:
def initialize(config)
self.reip1 = config["reip1"]
self.reip2 = config["reip2"]
@reUrl1 = "#{self.reip1}:8080/redeye/rooms/0/devices/2/commands/send?commandId="
@reUrl2 = "#{self.reip2}:8080/redeye/rooms/0/devices/2/commands/send?commandId="
@reUrl = @reUrl2
end
.
.
.
.
def change_redeye(redeye)
redeye = "#{redeye}".downcase
redeye = "#{redeye}".strip
redeyeid = "#{@redeyeId["#{redeye}"]}".to_i
if redeyeid > 0
say "OK. Changing to RedEye #{redeye}."
# results in resel = "@reUrl2" Does what I want.
resel = "@reUrl#{redeyeid}"
# FIXIT: need to end up with the URL of the device, but can't find the right syntax.
@reUrl = "#{#{resel}}"
else
say "Sorry, I am not programmed to control RedEye #{redeye}."
end
request_completed
end
答案 0 :(得分:6)
tl; dr我终于弄清楚你要做什么了。虽然以下答案对于您滥用字符串插入仍然完全准确,但您实际之后 之后是instance_variable_get
。我没有意识到你试图访问名称存储在字符串中的变量的值。
使用字符串和插值时, lot 错误。您只需要在字符串中嵌入变量时使用"#{}"
。几乎在每种情况下你都使用它不正确。下面是一些具体的例子。
首先,不要这样做:
redeye = "#{redeye}".downcase
redeye = "#{redeye}".strip
首先,您将转换为字符串两次。第一次使用#{}
后,它已经是一个字符串。但你首先不应该这样做。如果要将变量转换为字符串,请使用to_s
,并将后续方法调用链接到上一个方法的返回值:
redeye = redeye.to_s.downcase.strip
此行确实已损坏,并且(据我所知)甚至不需要字符串插值:
redeyeid = "#{@redeyeId["#{redeye}"]}".to_i
如果@redeyeId
是一个整数数组,你只需要这个:
redeyeId = @redeyeId[redeye]
这一行可能在语法上正确但它也很破碎:如果您的意图是使用instance_variable_get
来访问@reUrl1
或{的值,那么这一行是正确的{1}}:
@reUrl2
您需要使用"@reUrl#{redeyeid}"
来插入#{}
成员变量以及常规变量。该行应该是
@variable
此行确实已损坏:
"#{@reUrl}#{redeyeid}"
这甚至应该做什么?我不能为我的生活弄清楚你的意图在这里。你在实际做的事情是,在一个字符串中,打开一个Ruby上下文,立即打开一个注释,导致该行的其余部分被忽略,语法错误以下一行。我不知道你认为这是什么,但它没有做任何有用的事情。
因为这里有这么多错误,我将尝试编写应编写的方法,并希望你能从中获得一些东西。在您再编写Ruby之前,需要到learn what #{}
does。它是字符串插值。
@reUrl = "#{#{resel}}"