Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我如何编写惰性转换语句?_Ruby - Fatal编程技术网

Ruby 我如何编写惰性转换语句?

Ruby 我如何编写惰性转换语句?,ruby,Ruby,很长一段时间以来,我拼命地想让它发挥作用,我在谷歌上搜索、修补,并询问了一些当地的红宝石专家(虽然不是pdx.rb,但我真的应该这样做) 我们试图在工作中做类似的事情: case user.roles.included? (... magic ...) when ['admin', 'editor'] then ... when ['anonymous'] then ... end 因此,您可以看到它感觉像是一个案例,但因为它没有使用El提到的==,所以它不起作用。我知道我可以使

很长一段时间以来,我拼命地想让它发挥作用,我在谷歌上搜索、修补,并询问了一些当地的红宝石专家(虽然不是pdx.rb,但我真的应该这样做)

我们试图在工作中做类似的事情:

case user.roles.included? (... magic ...) 
when ['admin', 'editor'] 
  then ...
when ['anonymous'] 
  then ...
end
因此,您可以看到它感觉像是一个
案例
,但因为它没有使用El提到的
==
,所以它不起作用。我知道我可以使用
if
,但它感觉像是一个应该使用
case
的地方

case 
  when x == 16
    puts 'hi'
  when x.is_a?(Object)
    puts 'obj'
end
如果我真的理解了这个问题,您只需要删除
case
关键字后面的
x
变量

lambda代码不起作用,因为lambda只返回参数

names_l.call(names)
# => {:name => 'Terry'}
这类似于运行以下代码:

case {:name => 'Terry'}
  when 'Terry'
    puts "Success!"
end
而且
{:name=>'Terry'}
不等于
'Terry'

如果我真的理解了这个问题,您只需要删除
case
关键字后面的
x
变量

lambda代码不起作用,因为lambda只返回参数

names_l.call(names)
# => {:name => 'Terry'}
这类似于运行以下代码:

case {:name => 'Terry'}
  when 'Terry'
    puts "Success!"
end

{:name=>'Terry'}
不等于
'Terry'

使用
==
运算符将给定给
case
的值与给定给
的参数进行比较时。另外,如果出现在与
when
语句不同的行上,则不需要
那么
正确的代码是:

case x
when 16
  puts 'hi'
when Object
  puts 'obj'
end
关于问题的新增内容:

case user.roles.included? (... magic ...) 
when ['admin', 'editor'] 
  ... 
when ['anonymous'] 
  ... 
end
这不起作用,因为数组的
==
没有映射到
包含
。我不确定数组的
===
运算符来自何处,甚至不知道它的作用,但您可以覆盖它以提供所需的功能

根据以上代码判断,如果其中一个用户角色与数组匹配,则希望触发
案例。这将覆盖
数组#==
以执行以下操作:

class Array
  def === other_array
    ! (other_array & self).empty?
  end
end

case user.roles
when ['admin', 'editor'] 
  ... 
when ['anonymous'] 
  ... 
end
警告:取决于覆盖
数组的位置#==
这可能会产生不可预见的后果,因为它会更改该范围内的所有数组。鉴于
==
是从对象继承的,而该对象是
==
的别名,我不认为这会是一个大问题

新的
===
与旧的
===
不同的地方:

  • 如果一个数组是另一个数组的子集或重新排序,则New
    ==
    将返回true
  • 只有当两个数组(顺序和内容)相同时,Old
    ==
    才会返回true

据我所知,
case
/
when
是唯一可以对数组隐式调用
==
的时间。

when
使用
==
操作符将
case
的值与
when
的参数进行比较。另外,如果出现在与
when
语句不同的行上,则不需要
那么
正确的代码是:

case x
when 16
  puts 'hi'
when Object
  puts 'obj'
end
关于问题的新增内容:

case user.roles.included? (... magic ...) 
when ['admin', 'editor'] 
  ... 
when ['anonymous'] 
  ... 
end
这不起作用,因为数组的
==
没有映射到
包含
。我不确定数组的
===
运算符来自何处,甚至不知道它的作用,但您可以覆盖它以提供所需的功能

根据以上代码判断,如果其中一个用户角色与数组匹配,则希望触发
案例。这将覆盖
数组#==
以执行以下操作:

class Array
  def === other_array
    ! (other_array & self).empty?
  end
end

case user.roles
when ['admin', 'editor'] 
  ... 
when ['anonymous'] 
  ... 
end
警告:取决于覆盖
数组的位置#==
这可能会产生不可预见的后果,因为它会更改该范围内的所有数组。鉴于
==
是从对象继承的,而该对象是
==
的别名,我不认为这会是一个大问题

新的
===
与旧的
===
不同的地方:

  • 如果一个数组是另一个数组的子集或重新排序,则New
    ==
    将返回true
  • 只有当两个数组(顺序和内容)相同时,Old
    ==
    才会返回true

据我所知,
case
/
是唯一一次可以对数组隐式调用
=

哈,这是我问题的一半。我没想到会这么容易。我将试图澄清我的问题的其余部分。也许我能找到引起我问题的旧代码。找不到代码,我在错误的机器上。但我会告诉你情况。我们在rails中创建了一个命名范围,需要根据登录用户的角色采取不同的行动。因此,案例需要一个函数,而当需要是一个数组时。本质上我是这样想的(伪代码):case user.roles.included?(…magic…)当['admin','editor']当['anonymous']结束时,我们最终使用了一个函数,但这仍然困扰着我。如何获取案例中要评估的when部分?或者这只是错误的逻辑,必须用函数来完成?好的,注释中没有代码。希望你明白我的意思。你对lambda的解释是正确的,但是你的案例代码为我抛出了missing-then错误。我在irb中针对Ruby 1.8.6、1.8.7和1.9.1测试了该语句,但没有得到任何错误消息那么关键字不需要换行。哈,这是我问题的一半。我没想到会这么容易。我将试图澄清我的问题的其余部分。也许我能找到引起我问题的旧代码。找不到代码,我在错误的机器上。但我会告诉你情况。我们在rails中创建了一个命名范围,需要根据登录用户的角色采取不同的行动。因此,案例需要一个函数,而当需要是一个数组时。本质上我是这样想的(伪代码):case user.roles.included?(…magic…)当['admin','editor']当['anonymous']结束时,我们最终使用了一个函数,但这仍然存在