我正在尝试实现这样的(简化):
macro_rules! atest {
($closure:tt) => {
let x = 5;
println!("Result is {}", $closure())
};
}
fn main() {
//let x = 50;
atest!((|| 5 + x));
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为atest在宏评估之前编译器会考虑宏的参数:
error[E0425]: cannot find value `x` in this scope
--> src/main.rs:10:20
|
10 | atest!((|| 5 + x));
| ^ not found in this scope
Run Code Online (Sandbox Code Playgroud)
是否有可能使这项工作?我的理解是在编译之前扩展了宏.
我正在使用带有python的GTK 3.4(带有GObject内省).
我有使用Gtk.UIManager构建的弹出菜单,当菜单实例化时,某些菜单项不活动/不可见.之后它们被激活,它们在菜单中变得可见.
然而,有一个小问题 - 大小一个弹出菜单(高度)似乎保持相同 - 我现在必须滚动菜单项 - 在菜单区域的顶部和底部有^ v箭头以显示项目不适合区域,可以向上和向下滚动.但是我非常喜欢弹出窗口的大小只是在显示时会改变.
弹出窗口在应用程序上实例化一次.像这样的对象:
menu_manager=Gtk.UIManager()
menu_manager.insert_action_group(self.core_actions)
menu_manager.insert_action_group(self.power_type_actions)
menu_manager.add_ui_from_file(os.path.join(_curr_dir, 'ui', 'menus.xml'))
self.menu_manager=menu_manager
self.popup=menu_manager.get_widget('/popup')
Run Code Online (Sandbox Code Playgroud)
并使用此信号处理程序显示在托盘图标上:
def show_menu(self, tray_icon, button, activate_time, user_data=None):
def pos(menu, icon):
p= Gtk.StatusIcon.position_menu(menu, icon)
return p
log.debug( 'Menu button=%s, time=%s', button, activate_time)
self.popup.popup(None, None, pos, tray_icon, button, activate_time )
Run Code Online (Sandbox Code Playgroud)
有没有办法如何强制弹出菜单调整大小以显示其所有项目而无需滚动?
我确实有自己的媒体播放应用程序-正在使用MediaSessionCompat(与ExoPlayer和MediaSessionConnector插件结合使用)。
在三星手机上,我遇到了AOD(始终显示)和锁定屏幕的小问题。两者都包含一个小型媒体控制器(三个按钮)以及曲目标题和专辑-我认为它可以与MediaSession一起使用。
我的问题是标题/专辑始终显示“未知” /“未知”(但按钮正常工作)。我确定我正确输入了MediaSession元数据,因为它在“活动”中使用了onMetadataChange回调,并且包含正确的标题。
我迷失了方向,不确定在哪里寻找问题并解决。这显然在我的应用中,因为其他播放器工作正常(在AOD上显示标题),但是我不知道除了MediaSession中的设置元数据外,我还需要做什么?