我有一个方法,它接受2个参数 - 在屏幕上打印消息和(默认)值。如果默认值为nil
,那么我只想在屏幕上打印消息,否则消息应包含方括号中的默认值。
例如:如果我通过method1("Hello" , "")
,则应打印Hello
,但如果我通过method1("Hello", "User")
,则应打印Hello [User]:
。但是现在即使在第二种情况下也只打印Hello
。
以下是我的代码:
def method1(mes, value)
val = ""
begin
if value == "" || "#{value}".to_i == 0
val = ask(mes) do |ch|
ch = true
end
else
val = ask(message+" [#{value}]: ") do |ch|
ch = true
end
end
if val == "" then
val = "#{value}"
end
rescue => e
print "Except occured in method1(#{mes}, #{value}) "+e
end
return val
end
答案 0 :(得分:2)
那是因为to_i
为每个不是数字的字符串返回0
:
"User".to_i == 0
# => true
所以,在你的代码中:
value = "User"
if value == "" || "#{value}".to_i == 0
puts "was here"
end
# => "was here"
您应该更改条件,或者检查value
是nil
还是空
if value.nil? || value.empty?
如果您使用的是Rails,则可以使用blank?
方法:
if value.blank?
答案 1 :(得分:0)
如果您正在使用rails
value.blank?
如果您只使用红宝石
empty = input2.respond_to?(:empty?) ? input2.empty? : input2.to_s.length.zero?
作为value.empty?不会对数字起作用
完整的解决方案
def method1(input1, input2)
result = input2.respond_to?(:empty?) ? !input2.empty? : input2.to_s.length > 0
input2 = "#{ result ? input2 : '' }"
puts input2.empty? ? input1 : "#{ input1 } [#{ input2 }]"
end
method1('Hello', '')
method1('Hello', 2)
method1('Hello', [])
method1('Hello', [2])
method1('Hello', {})
method1('Hello', { a: 2 })
method1('Hello', false)
#Output
Hello
Hello [Mr]
Hello [2]
Hello
Hello [[2]]
Hello
Hello [{:a=>2}]
Hello [false]
答案 2 :(得分:0)
试试这个
def func(mes, val = "")
puts val.size != 0 ? "#{mes} [#{val}]" : "#{mes}"
end
输出:
func(123) # 123
func("Hello") # Hello
func("Hello", 123) # Hello [123]
func("Hello", "test") # Hello [test]