小编Eva*_*Eva的帖子

Ruby替代void返回类型

我的经验是基于C语言(C,C++,Java,C#),其中函数的返回类型可以是无效的,即没有返回.但在Ruby中,似乎每个函数都返回一些东西.我想知道在Ruby中返回什么方法不会返回Java或C++中的任何内容.我最好的猜测是nil或者包含方法的对象(用于链接)或者只是忽略最后发生的事情,但我似乎无法找到任何关于此的信息.

Ruby中什么是void的替代品?

ruby return-type void

7
推荐指数
1
解决办法
4346
查看次数

HTML5中的<b> vs <span>

我一直难以决定何时使用b以及何时使用span.b元素的新语义看起来很模糊.

b元素代表一系列文本,在没有传达任何额外重要性且没有任何替代声音或情绪的暗示的情况下,为实用目的而引起注意

听起来就像你不能使用strong,em或i时使用的标签.

当没有其他元素更合适时,b元素应该作为最后的手段.

但是,当短语内容还没有适用的标签时,我们已经有了跨度.

span元素本身并不代表任何东西......它代表了它的孩子.

有一个示例用途列表

文档摘要中的关键词,评论中的产品名称,交互式文本驱动软件中的可操作单词或文章

但是我找不到将它们联系在一起的基本原则,而不是将它们塑造成大胆的.在旧规范甚至提到风格:

b元素表示文本范围在风格上偏离正常散文[强调添加]

样式是为CSS.我们还建议使用类来显示实际含义

作者可以使用b元素上的class属性来标识元素的使用原因

这听起来好像使用太多,不能单独按标签分组.我也可以使用类来解释span的语义.

span元素...与全局属性(例如class,lang或dir)一起使用时非常有用.

例子

如果我想要这个:

你的CS 101决赛的得分为42%.

我写吗

Your score for <b>CS 101 Final</b> is 42%.
Run Code Online (Sandbox Code Playgroud)

要么

Your score for <span>CS 101 Final</span> is 42%.
Run Code Online (Sandbox Code Playgroud)

或者对于这个:

答案: 42

可不可能是

<b>Answer</b> 42
Run Code Online (Sandbox Code Playgroud)

要么

<span>Answer</span> 42
Run Code Online (Sandbox Code Playgroud)

(它只是一个键值对,因此定义列表不适用.)

我不只是想知道各个例子的正确标签.我想知道为什么他们是对的.我用什么标准来决定ab或span标签?

html5 semantic-markup

7
推荐指数
1
解决办法
2363
查看次数

为什么像Java这样的语言区分字符串和char而其他语言不区分?

我注意到像Java这样的语言有一个char原语和一个字符串类.其他语言如Python和Ruby只有一个字符串类.相反,这些语言使用长度为1的字符串来表示字符.

我想知道这种区别是否是由于历史原因.我理解直接影响Java的语言有char类型,但没有字符串.而是使用char*或char []形成字符串.

但我不确定是否有这样做的实际目的.我也很好奇,如果某种方式在某些情况下优于另一种方式.

为什么像Java这样的语言区分char原语和字符串类,而像Ruby和Python这样的语言却没有?

当然必须有一些关于它的设计问题,无论是常规,效率,清晰度,易于实现等等.语言设计师真的只是从帽子中挑选一个角色表示,可以这么说吗?

ruby python java string char

6
推荐指数
1
解决办法
823
查看次数

为什么 Jetpack Compose 预览显示错误的字符串资源?

有时,当我在可组合项中使用字符串资源时,预览会显示错误的字符串。它对于文字字符串总是工作得很好,只有字符串资源是错误的。该错误并不一致。

例如,如果我有这个 strings.xml:

<resources>
    <string name="app_name">Violit</string>
    <string name="load_topic_failure_message">Something went wrong loading the topic</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

我有这个可组合项:

@Composable
fun TopicFailureContent() {
    Text(stringResource(R.string.load_topic_failure_message))
}

@Preview(showBackground = true)
@Composable
fun TopicFailureContentPreview() {
    TopicFailureContent()
}
Run Code Online (Sandbox Code Playgroud)

它可能会呈现“部分检查”或“导航菜单”之类的内容,而不是“加载主题时出错”。

如果我将可组合项更改为:

@Composable
fun TopicFailureContent() {
    Text("Something went wrong loading the topic")
}
Run Code Online (Sandbox Code Playgroud)

它可以正确渲染预览。

看起来预览可能会渲染附近的字符串,而不是我想要的字符串。字符串资源在测试和运行应用程序中工作正常。这只是预览,并不总是有效。

我正在使用 Android Studio Electric Eel 2022.1.1,但在之前的版本上也遇到了同样的问题。这在 Compose UI 版本 1.2.1 和 1.3.3 上均失败。

知道为什么字符串资源在预览中并不总是有效以及如何修复它吗?

android kotlin android-resources android-jetpack-compose android-jetpack-compose-preview

6
推荐指数
0
解决办法
1969
查看次数

战略设计模式与抽象工厂模式之间的差异是什么?

有人可以一劳永逸地向我解释这两者之间的区别,并尝试给出一种何时使用它们的指导方针?例子真的很棒.

design-patterns strategy-pattern abstract-factory

5
推荐指数
2
解决办法
4171
查看次数

使用带有箭头键的键绑定

我正在创建一个使用箭头键移动精灵的游戏。我已经添加了箭头键和字母 n 的键绑定,但箭头键不起作用。这是我的代码:

public class MyPanel extends JPanel {

    Sprite sprite = new Sprite();

    Timer gameClock = new Timer(DELAY, new ActionListener(){
        public void actionPerformed(ActionEvent e){
            sprite.move();
            // omit other methods
        }
    });

    // omit other member variables

    public MyPanel(){
        Abstract Action newGameAction = new AbstractAction("new game") {

            public void actionPerformed(ActionEvent e){
                doNewGame();
            }
        }

        setFocusable(true);

        addKeyBinding(new Pair<String, Action>("N", newGameAction));
        ArrayList<Pair<String, Action>> pairs = sprite.findKeyBindingPairs();
        for (Pair<String, Action> p : pairs)
            addKeyBindings(p);


        gameClock.start();

        // omit other panel init

    }

    private void …
Run Code Online (Sandbox Code Playgroud)

java swing key-bindings focusmanager arrow-keys

5
推荐指数
1
解决办法
3222
查看次数

在 Kotlin 流程中运行 Retrofit 协程测试时出现 TimeoutCancellationException

我有一个存储库,它创建一个流程,在其中发出挂起的 Retrofit 方法的结果。这在应用程序中有效,但我想对代码运行测试。

我在测试中使用 kotlinx-coroutines-test v1.6.0 和 MockWebServer v4.9.3。当我尝试运行测试时,我得到:

Timed out waiting for 1000 ms
kotlinx.coroutines.TimeoutCancellationException: Timed out waiting for 1000 ms
    at app//kotlinx.coroutines.TimeoutKt.TimeoutCancellationException(Timeout.kt:184)
    at app//kotlinx.coroutines.TimeoutCoroutine.run(Timeout.kt:154)
    at app//kotlinx.coroutines.test.TestDispatcher.processEvent$kotlinx_coroutines_test(TestDispatcher.kt:23)
    at app//kotlinx.coroutines.test.TestCoroutineScheduler.tryRunNextTask(TestCoroutineScheduler.kt:95)
    at app//kotlinx.coroutines.test.TestCoroutineScheduler.advanceUntilIdle(TestCoroutineScheduler.kt:110)
    at app//kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt.runTestCoroutine(TestBuilders.kt:212)
    at app//kotlinx.coroutines.test.TestBuildersKt.runTestCoroutine(Unknown Source)
    at app//kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTest$1$1.invokeSuspend(TestBuilders.kt:167)
    at app//kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTest$1$1.invoke(TestBuilders.kt)
    at app//kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTest$1$1.invoke(TestBuilders.kt)
    at app//kotlinx.coroutines.test.TestBuildersJvmKt$createTestResult$1.invokeSuspend(TestBuildersJvm.kt:13)
    (Coroutine boundary)
    at app.cash.turbine.ChannelBasedFlowTurbine$awaitEvent$2.invokeSuspend(FlowTurbine.kt:247)
    at app.cash.turbine.ChannelBasedFlowTurbine$withTimeout$2.invokeSuspend(FlowTurbine.kt:215)
    at app.cash.turbine.ChannelBasedFlowTurbine.awaitItem(FlowTurbine.kt:252)
    at ogbe.eva.prompt.home.HomeRepositoryTest$currentTask when server responds with error emits failure$1$1.invokeSuspend(HomeRepositoryTest.kt:90)
    at app.cash.turbine.FlowTurbineKt$test$2.invokeSuspend(FlowTurbine.kt:86)
    at ogbe.eva.prompt.home.HomeRepositoryTest$currentTask when server responds with error emits failure$1.invokeSuspend(HomeRepositoryTest.kt:89)
    at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTestCoroutine$2.invokeSuspend(TestBuilders.kt:208)
    (Coroutine creation stacktrace)
    at app//kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:184) …
Run Code Online (Sandbox Code Playgroud)

android kotlin mockwebserver retrofit2 kotlin-flow

5
推荐指数
1
解决办法
6504
查看次数

DRY if语句

我有一个C++程序,在许多不同的.cpp文件中,我做这样的事情:

if (!thing1.empty() && !thing2.empty())
{
    if (thing1.property < thing2.property)
        return func1();
    else if (thing2.property < thing1.property)
        return func2();
    else
        return func3();
}
else if (!thing1.empty())
{
    return func1();
}
else if (!thing2.empty())
{
    return func2();
}
else
{
   return func4();
}
Run Code Online (Sandbox Code Playgroud)

如果thing1大于thing2,我试图以某种方式执行func,如果情况相反,我会尝试向后执行func,但如果不存在那么我只会为那一半执行func.如果两者都不存在,我会做一些完全不同的事情.每次使用此模式时,属性,函数和返回类型都不同.对于我想做的事情有没有比这个丑陋的嵌套if语句更好的设计?

编辑:实现我的示例代码过于简单化.这里有一些我真正的代码,希望能更好地解释这个问题(虽然它更麻烦):

if (!diamondsOnly.empty() && !clubsOnly.empty())
{
    if (diamondsOnly.size() < clubsOnly.size())
    {
        if (passHighCards(player.hand, getHighCards(Card::DIAMONDS), result))
            return result;
        if (passHighCards(player.hand, getHighCards(Card::CLUBS), result))
            return result;
    }
    else if (clubsOnly.size() < diamondsOnly.size())
    {
        if (passHighCards(player.hand, getHighCards(Card::CLUBS), result))
            return result; …
Run Code Online (Sandbox Code Playgroud)

c++ if-statement dry

3
推荐指数
1
解决办法
292
查看次数

垂直旋转JTextField

我已经看过许多问题,询问如何以任意角度旋转JLabel或图像.我需要做的就是将文本字段旋转90度,但我还没有找到一种特别适合该角度的方法.我以为我正确地复制了答案,但我的文字字段没有旋转.

这是我正在做的SSCCE:

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class VerticalRotationSSCCE {

private static class VerticalTextField extends JTextField {

    private static final long serialVersionUID = 1L;

    public VerticalTextField(String text) {
        super(text);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        int cx = getWidth() / 2;
        int cy = getHeight() / 2;
        g2.rotate(1/2 * Math.PI, cx, cy);
        super.paintComponent(g2);
    }

}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() …
Run Code Online (Sandbox Code Playgroud)

java swing rotation jtextfield

3
推荐指数
1
解决办法
3454
查看次数

暂时禁用MouseListener

我正在和两个人一起工作JPanel.一个面板包含一个移动的球,默认移动,另一个面板有两个JRadioButton标记的OnOff.我坚持的部分是禁用和启用MouseListener(P2.java),允许用户点击面板重新定位球.我创建了函数,turnOnturnOff使用ActionListener(P1.java)触发.这会开始和停止球.我试过使用removeActionListener,但是编译器抛出了我无法使用该方法的错误.

另外,ItemListener这个例子中会更容易使用类似的,这样JRadioButton它已被选中时会被忽略吗?

P1.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class P1 extends JPanel
{
    private JRadioButton on = new JRadioButton("On", true);
    private JRadioButton off = new JRadioButton("Off");

    public P1()
    {
        ButtonGroup group = new ButtonGroup();
        group.add(on);
        group.add(off);

        add(on);
        add(off);

        ButtonHandler bh = new ButtonHandler();
        on.addActionListener(bh);
        off.addActionListener(bh);
    }

    private class …
Run Code Online (Sandbox Code Playgroud)

java swing jpanel

3
推荐指数
1
解决办法
1万
查看次数

如何在 pkl 文件中编写可在 python 脚本中使用的 write() 方法?

我正在尝试在不同脚本之间共享布尔值。在一个脚本中,如果调用某个函数,我想编辑布尔值。在其他脚本中,我想使用布尔值。我正在尝试使用酸洗,但我无法理解。我不知道在我的 pkl 文件中写什么。我的代码有点像这样:

一个.py

    import pickle

    boolean = False
    pickle.dumps(boolean, "filename.pkl")

    class Foo(object):

    #init method irrelevant

        def bar(self):
            foobar = raw_input("> ")

            if foobar == "baz":
                boolean = True
                pkl_file = open("filename.pkl", 'w')
                pickle.dumps(boolean, "filename.pkl")
            else:
                print "Hello"
Run Code Online (Sandbox Code Playgroud)

两个.py

    import pickle

    class Foobar(object):

    #init method irrelevant

    def foo_bar(self):
        foobar = raw_input("> ")
        boolean = pickle.loads("filename.pkl")

        if foobar == "foo" and boolean:
            print "Hi!"
        elif foobar == "foo":
            print "Hello there."
        else:
            print "Bye!"
Run Code Online (Sandbox Code Playgroud)

我有另一个脚本,它执行类似于two.py 的操作。我的 pkl 文件是空的。
当我尝试运行主脚本(与酸洗脚本完全不同)时,我得到“AttributeError:'str'对象没有属性'write'

python methods pickle

2
推荐指数
1
解决办法
5333
查看次数

将内联加速无效a(字符串b){cout << b; }

对于赋值,我们应该编写两种处理输出的方法.一个用于输出字符串,一个用于输出整数.

基本上我们有两种方法调用另一种方法:

void TheClass::displayString(string str){ cout << str; }
void TheClass::displayNumber(int n) { cout << n; }
Run Code Online (Sandbox Code Playgroud)

内联是否会通过不调用另一个函数来节省一些开销来增加速度,或者它会在命名空间中为cout创建更多内容吗?

inline void TheClass::displayString(string str) { cout << str; }
inline void TheClass::displayNumber(int n) { cout << n; }
Run Code Online (Sandbox Code Playgroud)

c++ methods performance inline overhead

1
推荐指数
1
解决办法
422
查看次数

find()有关boost bimap的问题

我有以下代码:

wxString getColorName(const wxColour& color)
{
    typedef ColorComboBox::ColorMap::right_const_iterator ConstColorIterator;
    ColorComboBox::ColorMap colorMap = ColorComboBox::getDefaultChoices();
    ConstColorIterator it = colorMap.right.find(color);
    return it != colorMap.right.end() ? it->second :
            ColorComboBox::CUSTOM_COLOR;
}
Run Code Online (Sandbox Code Playgroud)

其中定义了ColorMap

typedef boost::bimaps::bimap \
            <wxString, boost::bimaps::vector_of<wxColour> > \
            ColorMap;
Run Code Online (Sandbox Code Playgroud)

我一直得到一个很长的模板错误,基本上说找不到查找功能.然而

ColorMap::left_const_iterator it = choices_.left.find(GetValue());
Run Code Online (Sandbox Code Playgroud)

编译好.
我有一个预感,find函数只在某些集合类型的bimap中定义.我不能使用set_of wxColours,因为wxColour无法比较.(这甚至意味着什么?)我也尝试将集合类型更改为list_of,但这也不起作用.我使用bimap的全部意义在于,无论哪种方式,我都能找到价值观.我使用了错误的容器吗?是否有另一种我可以用于wxColour的集合类型,它允许我使用find函数?

编辑: 我最终创建了自己的容器类.

c++ boost bimap

1
推荐指数
1
解决办法
2372
查看次数