当前位置: 首页 > 知识库问答 >
问题:

Ruby:如何将字符串转换为布尔值

丌官承
2023-03-14

我有一个值,它将是四件事之一:布尔true、布尔false、字符串“true”或字符串“false”。如果字符串是字符串,我想将字符串转换为布尔值,否则不修改它。换句话说:

“true”应该变为true

“false”应变为false

真实应该保持真实

false应保持为false

共有3个答案

柯子琪
2023-03-14

我经常使用这种模式来扩展Ruby的核心行为,使其更容易处理将任意数据类型转换为布尔值的问题,这使得处理各种URL参数等变得非常容易。

class String
  def to_boolean
    ActiveRecord::Type::Boolean.new.cast(self)
  end
end

class NilClass
  def to_boolean
    false
  end
end

class TrueClass
  def to_boolean
    true
  end

  def to_i
    1
  end
end

class FalseClass
  def to_boolean
    false
  end

  def to_i
    0
  end
end

class Integer
  def to_boolean
    to_s.to_boolean
  end
end

假设您有一个参数foo,它可以是:

  • 一个整数(0为假,其他均为真)

您可以只调用foo,而不用使用一堆条件。到\u boolean,它将为您完成其余的魔术。

在Rails中,我将其添加到几乎所有项目中名为core_ext.rb的初始化程序中,因为这种模式非常普遍。

## EXAMPLES

nil.to_boolean     == false
true.to_boolean    == true
false.to_boolean   == false
0.to_boolean       == false
1.to_boolean       == true
99.to_boolean      == true
"true".to_boolean  == true
"foo".to_boolean   == true
"false".to_boolean == false
"TRUE".to_boolean  == true
"FALSE".to_boolean == false
"0".to_boolean     == false
"1".to_boolean     == true
true.to_i          == 1
false.to_i         == 0
邹弘
2023-03-14
def true?(obj)
  obj.to_s.downcase == "true"
end
冯德宇
2023-03-14

如果使用Rails 5,则可以执行ActiveModel::Type::Boolean。新铸造(值)。

在Rails 4.2中,使用ActiveRecord::Type::Boolean。新键入\u cast\u from\u user(值)。

行为略有不同,如在Rails 4.2中,检查真值和假值。在Rails 5中,只检查假值-除非值为nil或匹配假值,否则假定为真。两个版本中的假值相同:FALSE_VALUES=[false,0,"0","f","F","false","FALSE","off","OFF"]

Rails 5来源:https://github.com/rails/rails/blob/5-1-stable/activemodel/lib/active_model/type/boolean.rb

 类似资料:
  • 问题内容: 我有一个布尔变量,我想将其转换为字符串: 我需要转换后的值的格式为:,而不是 我试过了: 但是它告诉我,并且不是公认的功能。 如何将此布尔值转换为PHP 或PHP 格式的字符串? 问题答案: 最简单的解决方案:

  • 问题内容: 如何将字符串转换为? 它返回 布尔值true 但这应该是。 问题答案: 除非字符串的值被PHP视为“空”(从的文档中获取),否则字符串始终为布尔值true : (一个空字符串); (0作为字符串) 如果您需要根据字符串的文本值设置布尔值,则需要检查该值是否存在。 编辑:上面的代码旨在使理解更加清晰。在实际使用中,以下代码可能更合适: 或者使用该功能可能会覆盖更多的布尔值: 覆盖整个范围

  • 问题内容: 我可以将表示布尔值(例如,“ true”,“ false”)的字符串转换为JavaScript中的固有类型吗? 我有一个隐藏的HTML表单,可根据用户在列表中的选择进行更新。此表单包含一些表示布尔值的字段,并使用内部布尔值动态填充。但是,一旦将此值放入隐藏的输入字段中,它将成为一个字符串。 确定字段的布尔值(将其转换为字符串后)的唯一方法是依赖于其字符串表示形式的文字值。 有没有更好的

  • 问题内容: 我想转换一个叫到(或使用),但它不能做的工作。Go中惯用的方式是什么? 问题答案: 使用strconv包 docs func FormatBool(b bool)字符串Formatbool 根据b的值返回“ true”或“ false”

  • 我知道我不是第一个问这个问题的人,正如我在标题中提到的,我正在尝试转换字符串值布尔值。 我之前已经将一些值放入本地存储,现在我想获取所有值并将所有值赋给一些布尔变量。 应用程序。组成部分ts 这里是这个。btnLoginNumOne和这个。btnLoginEdit是字符串值(“true,false”)。 镜子组成部分ts 在这个组件中this.btnLoginNumOne和t是布尔值; 我在sta

  • 本文向大家介绍将Java字符串对象转换为布尔对象,包括了将Java字符串对象转换为布尔对象的使用技巧和注意事项,需要的朋友参考一下 可以使用字符串文字在Java中创建字符串对象。 创建字符串对象的另一种方法是使用new关键字。 我们使用第一种方法来创建字符串对象。 现在,使用该方法将字符串对象转换为布尔对象。我们已经在布尔对象上使用了此方法。 现在让我们看完整的示例,以显示如何将String Ob