【问题标题】:result of passing a symbol to method [closed]将符号传递给方法的结果[关闭]
【发布时间】:2013-07-25 11:54:44
【问题描述】:

我有一个带有一个参数的方法声明:

def my_method(argum)
   if argum.empty?
      puts "argument is empty"
   else 
      puts "argument is not empty"
   end
end

当我调用此方法并将 symbol 传递给它时:my_method(:aleatoir_symbol) 它告诉我 argument is not empty 并且当我将文字符号传递给它时像这样my_method(:"") 它显示 argument is empty

我也用 irb 进行了测试,结果如下:

:a_symbol.empty?
 => false
 :"".empty?
 => true

我的问题是为什么当我传递像 :any_symbol 这样的符号时,它会显示 argument is not empty ??

我正在搜索,我发现了一个类似的问题here,但只有一个答案让我无法清楚地理解原因。任何明确的答案都会有所帮助。谢谢

** 更新**


here 是我最初的问题,我打开这个问题是因为我没有一个好的答案

【问题讨论】:

  • 问题是什么?
  • 我更新我的问题谢谢
  • 我不明白你的问题。在我看来,这种行为是完全可以预料的。
  • symbol 未赋值”是什么意思?
  • 这不是“为符号赋值”。它向方法传递了多个参数。

标签: ruby-on-rails ruby


【解决方案1】:

Symbol#empty 基本上定义为self.to_s.empty?self 是符号)。

所以回答你的问题为什么:"".empty?true:这是因为:"".to_s(空字符串)是空的。

解决您的评论::any_symbol.empty?false,因为 :any_symbol.to_s.empty?false。这是同一件事。也许empty? 不是您正在寻找的方法。也许我只是没明白你在问什么。

【讨论】:

  • 我的问题是为什么:any_symbol.empty?是非空的(不要问:"")
  • @medBo 为什么应该这样?为什么你期望:any_symbol.empty? 返回false
  • 我知道符号不是变量,并且用于设计没有值的东西,但是当我调用一个测试传递给它的标题是否为空的方法时,我感到困惑: full_title(yield(:title)) ,这里如果我不提供带有 provide(:title, "value") 的标题,它仍然是非空的
  • @medBo 我读了你的评论两遍,但我仍然不明白你为什么期望:any_symbol.empty? 会返回false。请更清楚。
猜你喜欢
  • 2014-06-05
  • 2010-09-07
  • 2016-02-21
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多