首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >class-eval块内的正则表达式错误

class-eval块内的正则表达式错误
EN

Stack Overflow用户
提问于 2012-07-23 13:38:58
回答 1查看 303关注 0票数 1

我有一些代码可以将简单定义中的方法添加到模块中,以便通过REST客户端的包装器类与远程资源进行对话。

代码语言:javascript
复制
def service_function(function_name, method, uri, parameters)
  class_eval <<-RUBY
    def #{function_name}(params)
      if !(#{function_name}_required_params - params.keys).empty? || \
           !(params.keys - #{function_name}_params).empty?
        raise Errors::InvalidParameters.new(service_name, __method__,
                                            params.keys, #{function_name}_params)
      end
      WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)
    end

    def #{function_name}_params
      #{function_name}_required_params + #{function_name}_optional_params
    end

    def #{function_name}_required_params
      #{parameters}.select { |param,req| req }.keys
    end

    def #{function_name}_optional_params
      #{parameters}.select { |param,req| !req }.keys
    end
  RUBY
end

甚至在我可以运行代码之前,只要要求我在IRB中构建的gem就会产生这个错误:

代码语言:javascript
复制
1.9.2p320 :001 > require 'web-services'
SyntaxError: (eval):7: unknown regexp options - rt

令人不快的一行是:

代码语言:javascript
复制
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)

删除"#{uri}“参数可以修复它,即使保留在"#{method}”参数中。有没有人知道为什么会这样?我已经无计可施了。

EN

回答 1

Stack Overflow用户

发布于 2012-07-23 14:01:01

你有一个看起来像/something/rturl,在这里它看起来像一个正则表达式:

代码语言:javascript
复制
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)

您需要转义并引用#{uri},这样它看起来就像class_eval文档中的一个字符串,这样class_eval就会看到perform(..., '/something/rt', ...)并感到高兴。对于#{method},您可能会遇到类似的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11606985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档