Ruby:if boolean true返回同一行的第一个\u名称(在csv文件中)

Ruby:if boolean true返回同一行的第一个\u名称(在csv文件中),ruby,csv,Ruby,Csv,我能够在一定程度上解释这一点,但我想补充另一个结果。如果布尔语句返回true,如何让语句从CSV中的同一行(标题为“first_name”)返回值 如果布尔语句返回true,如何让语句从CSV中的同一行(标题为“first_name”)返回值? 按原样运行代码,Ruby期望最终“结束”,并引发此错误: 语法错误,输入意外结束,需要关键字\u end 在代码中添加另一个结尾“end”将导致计算if x==true块,但是请注意,下面代码中的缩进可能更清晰。使用,此代码将同时打印Welcome b

我能够在一定程度上解释这一点,但我想补充另一个结果。如果布尔语句返回true,如何让语句从CSV中的同一行(标题为“first_name”)返回值


如果布尔语句返回true,如何让语句从CSV中的同一行(标题为“first_name”)返回值?

按原样运行代码,Ruby期望最终“结束”,并引发此错误:
语法错误,输入意外结束,需要关键字\u end

在代码中添加另一个结尾“end”将导致计算
if x==true
块,但是请注意,下面代码中的缩进可能更清晰。使用,此代码将同时打印
Welcome back…
,如果
x==true
,则返回
的名字:

require 'csv'

def customer_check(user_pin)

  x = false

  CSV.read('customers.csv', headers: true).any? do |row|
    x = true if row['customerNo'] == user_pin && row['lastName'] == "Dunbar"
    yellow = row['firstName']
    # The if/else clauses are indented within the CSV.read
    if x                                           # <-- "== true" is redundant
      # puts "Welcome back #{yellow}."             # you can lose "yellow" if you want to
      puts "Welcome back #{row['firstName']}."
      sleep(1.5)
      # return yellow                              # <-- RETURN VALUE
      return row['firstName']                      # <-- RETURN VALUE
    else  
      puts "login failed. Please try again in 3 seconds..."
      sleep(3.0)
      # login_start
    end
  # navigation_menu

  end

end

return_name = customer_check('1')                  # <-- prints "Welcome back John"
puts return_name                                   # <-- "John" is the RETURN VALUE
需要“csv”
def客户检查(用户pin)
x=假
读取('customers.CSV',标题:true)。有吗?多罗|
如果行['customerNo']==user\u pin和行['lastName']==Dunbar,则x=true
黄色=行['firstName']
#if/else子句在CSV.read中缩进

如果x#如果布尔语句返回true,如何让语句从CSV中的同一行(标题为“first_name”)返回值?

按原样运行代码,Ruby期望最终“结束”,并引发此错误:
语法错误,输入意外结束,需要关键字\u end

在代码中添加另一个结尾“end”将导致计算
if x==true
块,但是请注意,下面代码中的缩进可能更清晰。使用,此代码将同时打印
Welcome back…
,如果
x==true
,则返回
的名字:

require 'csv'

def customer_check(user_pin)

  x = false

  CSV.read('customers.csv', headers: true).any? do |row|
    x = true if row['customerNo'] == user_pin && row['lastName'] == "Dunbar"
    yellow = row['firstName']
    # The if/else clauses are indented within the CSV.read
    if x                                           # <-- "== true" is redundant
      # puts "Welcome back #{yellow}."             # you can lose "yellow" if you want to
      puts "Welcome back #{row['firstName']}."
      sleep(1.5)
      # return yellow                              # <-- RETURN VALUE
      return row['firstName']                      # <-- RETURN VALUE
    else  
      puts "login failed. Please try again in 3 seconds..."
      sleep(3.0)
      # login_start
    end
  # navigation_menu

  end

end

return_name = customer_check('1')                  # <-- prints "Welcome back John"
puts return_name                                   # <-- "John" is the RETURN VALUE
需要“csv”
def客户检查(用户pin)
x=假
读取('customers.CSV',标题:true)。有吗?多罗|
如果行['customerNo']==user\u pin和行['lastName']==Dunbar,则x=true
黄色=行['firstName']
#if/else子句在CSV.read中缩进

如果x#如果您100%确定csv中的PIN是唯一的,您可以尝试此方法

def customer_check(user_pin)

  user = CSV.read('customers.csv', headers: true).detect { |row| 
      row['pin'] == user_pin && row['work_here'] == "YES"
  }

  if user
    puts "Welcome back #{user['first_name']}."
    sleep(1.5)
  else
    puts "login failed. Please try again in 3 seconds..."
    sleep(3.0)
    login_start
  end

  navigation_menu

end 
变量
user
将被初始化为.csv中条件为true的对应行。否则其值将为零:

检测
方法依据:

将枚举中的每个项传递给块。返回块不为false的第一个块。如果没有匹配的对象,则调用ifnone并在指定时返回其结果,否则返回nil

如果没有给出块,则返回枚举数


请记住,您可能必须确保
行['pin']
与您的
用户id
数据类型匹配,因为它可能以字符串形式出现,在这种情况下,您必须
行['pin'].\u i==user\u pin

如果您100%确定csv中的pin是唯一的,您可以尝试此方法

def customer_check(user_pin)

  user = CSV.read('customers.csv', headers: true).detect { |row| 
      row['pin'] == user_pin && row['work_here'] == "YES"
  }

  if user
    puts "Welcome back #{user['first_name']}."
    sleep(1.5)
  else
    puts "login failed. Please try again in 3 seconds..."
    sleep(3.0)
    login_start
  end

  navigation_menu

end 
变量
user
将被初始化为.csv中条件为true的对应行。否则其值将为零:

检测
方法依据:

将枚举中的每个项传递给块。返回块不为false的第一个块。如果没有匹配的对象,则调用ifnone并在指定时返回其结果,否则返回nil

如果没有给出块,则返回枚举数


请记住,您可能必须确保
行['pin']
与您的
用户id
数据类型匹配,因为它可能以字符串的形式出现,在这种情况下,您必须
行['pin'].\u i==user\u pin

如果行['pin']==user\u pin&&row['work\u here']==“YES”
x=row['pin'.]==user\u pin&&row['work\u here']==“YES”
第二,如果x==true,则
仅到
如果x
。上述代码中没有额外的
end
关键字吗?你能修一下压痕吗?那就更清楚了。对不起,我刚刚更新了代码。希望它更有意义@Jagdeep您提议的更改似乎没有成功,但可能是因为代码不正确。如果行['pin']==user\u pin&&row['work\u here']==“YES”
x=row['pin']==user\u pin&&row['work\u here']==“YES”
,则可以重构
x=true,
如果x==true,则仅当x
。上述代码中是否有额外的
end
关键字?你能修一下压痕吗?那就更清楚了。对不起,我刚刚更新了代码。希望它更有意义@Jagdeep你提出的修改似乎没有奏效,但可能是因为代码不正确。抱歉,肯尼迪先生,我更新了最初的问题。希望这更有意义。@PaulThompson,不必道歉!别忘了选择一个答案,然后投票选出有用的评论/答案:)抱歉,肯尼迪先生,我更新了原始问题。希望这更有意义。@PaulThompson,不必道歉!别忘了选择一个答案,并投票选出有用的注释/答案:)另外,我不会对条件句中的逻辑运算使用
——另外,我不会对条件句中的逻辑运算使用
-