首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby HERE-DOC方法参数传递

Ruby HERE-DOC方法参数传递
EN

Stack Overflow用户
提问于 2013-05-30 17:14:07
回答 3查看 4K关注 0票数 5

我正在尝试使用带有here-doc的自定义方法,并希望传递参数(没有业务用例,我只是在尝试学习ruby)。在这种情况下有没有传递参数的方法?这就是我到目前为止所拥有的。

简单的方法,只是工作得很好。

代码语言:javascript
复制
def meth1
  self.upcase
end

str1 = <<MY.meth1
  i am a small case string
MY

# "I AM A SMALL CASE STRING\n"

现在,我想让我们放弃一些参数,尝试不同的变体,irb给了我一个空白的凝视。

代码语言:javascript
复制
#variation 1

def meth2( <<EOF1, <<EOF2 )
  EOF1.upcase + "..." + EOF2.downcase
end

str2 = <<MY.meth2
 some string
EOF1
 ANOTHER STRING
EOF2
MY
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-30 17:25:01

我猜这就是你想要做的:

代码语言:javascript
复制
def meth2(str1, str2)
  str1.upcase + "..." + str2.downcase
end

str2 = meth2(<<EOF1, <<EOF2)
 some string
EOF1
 ANOTHER STRING
EOF2

str2 # => " SOME STRING\n... another string\n"

如果您不打算缩进,请参见here。←看到我的文字游戏了吗?

票数 9
EN

Stack Overflow用户

发布于 2013-05-30 17:23:53

尝试一些类似的东西

代码语言:javascript
复制
something = "bananas"

str = <<EOF
  this has some #{something} in!
EOF
票数 3
EN

Stack Overflow用户

发布于 2013-05-30 17:32:46

尝试如下所示:

代码语言:javascript
复制
def meth2( item1, item2 )
  item1.upcase + "..." + item2.downcase
end

str2 = meth2 <<EOF1, <<EOF2
 some string
EOF1
 ANOTHER STRING
EOF2

你遇到的问题是由于没有完全理解work how样式的字符串文字是如何工作的。<<DELIMITER部分只是告诉解析器从后面的行中获取字符串数据。如果一行上有多个<<DELIMITER,那么它们会堆叠在一起,并按顺序读入。因此,在这种情况下,上面的代码完全等同于:

代码语言:javascript
复制
def meth2( item1, item2 )
  item1.upcase + "..." + item2.downcase
end

str2 = meth2 " some string\n", " ANOTHER STRING\n"

最重要的是,没有办法像你试图在那里做的那样,在函数中构建there文档……它们只能在与其他字符串文字相同的位置和方式使用,例如“双引号”或“单引号”文字。

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

https://stackoverflow.com/questions/16832162

复制
相关文章

相似问题

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