使用if和else

时间:2015-03-20 01:23:39

标签: ruby

如果符合条件,此行代码会打印您的帐户余额:

p account.balance if num_account == account.num_account && agencia == account.agencia

如果不满足这些条件,我希望else而不重复所有内容。你能帮我解决一下这段代码吗?

3 个答案:

答案 0 :(得分:6)

if (num_account == account.num_account) && (agencia == account.agencia)
  p account.balance
else
  # here you go
end

答案 1 :(得分:1)

def valid_account?(account_number, agency)
  account_number == account.num_account && agency == account.agencia
end

account_balance = if valid_account?(num_account, agencia)
  account.balance
else
  # here you go
end
puts account_balance # or whatever it is you want to do with that.

您的代码行不仅打印帐户余额,还以人类可读的形式表示。这意味着如果它表示为字符串,您将获得引号,如果它作为数组返回,您将得到方括号。 p方法不是puts的替代或缩短替代品。它的行为有所不同。

您可能想要从if语句中重构条件语句,并使更长的代码由有效的代码表示?并可能提供参数。更好的是,创建一个代表正在查询的帐户的对象。

看起来像这样:

def account=(account_number, agency)
  @account_number, @agency = account_number, agency
end

def account_number
  @account_number
end

def agency
  @agency
end

def valid_account?
  account_number == account.num_account && agency == account.agencia
end

然后你可以这样做:

puts(valid_account? ? account.balance : "Something else")

注意valid_account变得多么简单?并且您不需要括号(即使在条件语句中,由于&&优先于==

可以通过执行以下操作来创建访问者或访问者:

attr_reader :account_number, :agency

然后,您可以删除上面定义agencyaccount_number方法的6行代码,只留下account=方法和valid_account?方法。

我不确定这是否是提出这个问题的最佳位置,因为看起来Code Review可能是一个更好的地方。因为这感觉就像代码审查。

没有代码经过测试,仅提供说明。如果它适合你,那么这是一个加号。还有一些名字可能已从非英语改为英语,但我试着小心不要破坏功能。

答案 2 :(得分:-2)

p num_account == account.num_account && agencia == account.agencia ? account.balance : something_else