当保护子句时如何在长生不老药中使用按位运算符?

Chedy2149

我有以下函数,它只需要与n2 的幂 ( 1, 2, 4, 8, 16, 32, 64, ...)的幂值匹配

defmodule MyModule do
  def my_func(n) when is_power_of_two(n) do
     ## Some expression
  end
  def is_power_of_two(x) do
    (x != 0)
        and (x &&& (x - 1)) == 0)
  end
end

首先,我尝试is_power_of_two在模块中定义为一个函数,但它没有用,我收到了这个错误:

cannot invoke local is_power_of_two/1 inside guard.

在此博客文章之后,我尝试将其定义为以下宏:

defmodule MyModule.Util do
  defmacro is_power_of_two(x) do
    quote do
      (unquote(x) != 0)
        and ((unquote(x) &&& (unquote(x) - 1)) == 0)
    end
  end
end

效果不佳,我收到以下错误:

cannot invoke local &&&/2 inside guard

似乎&&&无法从when宏扩展后的子句中调用按位运算

如何执行需要包含按位运算符的守卫的匹配?

多伯特

错误消息具有误导性。你只是缺少一个import Bitwisein MyModule.Util如果我添加import

defmodule MyModule.Util do
  import Bitwise

  defmacro is_power_of_two(x) do
    quote do
      (unquote(x) != 0) and ((unquote(x) &&& (unquote(x) - 1)) == 0)
    end
  end
end

defmodule MyModule do
  import MyModule.Util

  def my_func(n) when is_power_of_two(n) do
    true
  end
  def my_func(_), do: false
end

IO.inspect MyModule.my_func(128)
IO.inspect MyModule.my_func(129)

输出:

true
false

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在长生不老药中使用defdelegate?

来自分类Dev

在流明中使用长生不老药

来自分类Dev

如何在长生不老药的Ecto查询中使用“ case-when”?

来自分类Dev

如何在长生不老药中增加列表?

来自分类Dev

长生不老药的位串包含子位串

来自分类Dev

如何在 QueryDSL 中使用按位运算符?

来自分类Dev

在laravel 5中使用长生不老药时,如何防止口香糖手表崩溃(例如停止观看)?

来自分类Dev

在长生不老药(Laravel)中使用.version的重要性是什么?

来自分类Dev

长生不老药-如何在管道中添加条件管道?

来自分类Dev

如何在长生不老药中调用:ets.fun2ms?

来自分类Dev

如何在长生不老药的列表中获得重复项?

来自分类Dev

如何在长生不老药中的地图上创建“哈希”或“ md5”?

来自分类Dev

如何在谷歌存储中创建一个文件夹?长生不老药

来自分类Dev

我如何在长生不老药中加入Repo.find_by()

来自分类Dev

使用Laravel的长生不老药导入CSS文件时发生ErrorException

来自分类Dev

弹性apm用于长生不老药和opentelemtry的使用

来自分类Dev

使用 Laravel 长生不老药的关键 css

来自分类Dev

在线用户存储长生不老药

来自分类Dev

什么事 在长生不老药

来自分类Dev

长生不老药地图改变结构

来自分类Dev

长生不老药:流到运行

来自分类Dev

更新长生不老药地图

来自分类Dev

编译长生不老药权限被拒绝

来自分类Dev

步骤列表与长生不老药

来自分类Dev

长生不老药:模式匹配或守卫

来自分类Dev

长生不老药-改变行为

来自分类Dev

长生不老药:同时启动流程

来自分类Dev

长生不老药地图改变结构

来自分类Dev

更新长生不老药地图

Related 相关文章

热门标签

归档